冒泡排序:如其名,将较大或较小的数像冒泡的方式一样浮现上来
我们先以 3 2 4 1 按升序冒泡为例
第一轮冒泡:3 2 4 1→2 3 4 1→2 3 1 4
第二轮冒泡:2 3 1 4→2 1 3 4
第三轮冒泡:2 1 3 4→1 2 3 4
排序完成
排序时每次只比较当前元素与后一个 元素的大小,如果当前元素大于后一个元素,则交换,如此循环直到队尾,每轮排序都可以保证将当前排序下最大的元素送到未排序部分的队尾。
#include <stdio.h>
#include <windows.h>
void bubble_sort(int arr[], int sz)
{
for (int i = 0; i<sz - 1; i++)
{
int flag = 1;//如果数组已经是有序的,则不会进入主程序
for (int j = 0; j<sz - i - 1; j++)
{
if (arr[j] > arr[j + 1])//如果想求降序则将这里的>改为<
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;
}
}
if (flag){
break;//如果有序,则调到这里
}
}
}
int main()
{
int i = 0;
int arr[] = { 11, 33, 3, 8, 4523, 65745, 87, 0 };//数组的元素可以是任意数量的整形
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, sz);
for (i = 0; i<sz; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}