这里分成了3种,分别对应了冒泡排序初级版、一般版、哨兵版。
初级版://冒泡排序初始版(从小到大)
void bubblesort0(int* arr)
{
for (int i = 1; i < arr[0]; i++)
{
for (int j = i + 1; j <= arr[0]; j++)
{
if (arr[i] > arr[j])
{
swap(arr + i, arr + j);
}
}
}
}
一般版:(常规版)
//冒泡排序常规版
void bubblesort1(int* arr)
{
for (int i = 1; i < arr[0]; i++)
{
for (int j = arr[0]; j > i; j--)
{
if (arr[j] < arr[j - 1])
{
swap(arr + j, arr + j - 1);
}
}
}
}
哨兵版:(target标志,当数组完全排好序的时候自动停止循环)
//冒泡排序哨兵版
void bubblesort2(int* arr)
{
int target = 1;
for (int i = 1; i < arr[0] && target; i++)
{
target = 0;
for (int j = arr[0]; j > i; j--)
{
if (arr[j] < arr[j - 1])
{
swap(arr + j, arr + j - 1);
target = 1;
}
}
}
}
demo.c:
#include//遍历数组 void print(int* arr) { for (int i = 0; i < arr[0]; i++) { printf("%dt", arr[i + 1]); } printf("n"); } //交换数值 void swap(int* a, int* b) { *a ^= *b ^= *a ^= *b; } //冒泡排序初始版(从小到大) void bubblesort0(int* arr) { for (int i = 1; i < arr[0]; i++) { for (int j = i + 1; j <= arr[0]; j++) { if (arr[i] > arr[j]) { swap(arr + i, arr + j); } } } } //冒泡排序常规版 void bubblesort1(int* arr) { for (int i = 1; i < arr[0]; i++) { for (int j = arr[0]; j > i; j--) { if (arr[j] < arr[j - 1]) { swap(arr + j, arr + j - 1); } } } } //冒泡排序哨兵版 void bubblesort2(int* arr) { int target = 1; for (int i = 1; i < arr[0] && target; i++) { target = 0; for (int j = arr[0]; j > i; j--) { if (arr[j] < arr[j - 1]) { swap(arr + j, arr + j - 1); target = 1; } } } } int main() { //初始化待排序数组(第一个元素存放数组的长度) int arr[11] = { 0, 25, 32, 1, 45, 23, 3, 67, 24, 4, 10 }; arr[0] = sizeof(arr) / 4 - 1; bubblesort2(arr); print(arr); return 0; }
QQ: 1757093754



