冒泡排序:是一种稳定排序,在排序过程中可以监测到数据是否已经有序(对数据的有序性敏感),可以立即停止,如果待排序的数据基本有序,则冒泡的效率是非常高的。下面用C语言实现冒泡排序。
#include <stdio.h>
#include <stdlib.h>
#define swap(a, b) {typeof(a) t=a; a=b; b=t;} // 交换宏函数,typeof用于获取a的类型
void bubble_sort(int* arr, int len) // 参数为待排序数组的首地址,数组的长度
{
for(int i=0; i<len-1; i++) // 当排序到倒数第二个数据时,排序已经完成,所以i<len-1
{
bool flag = true; // 设置标志位,用来记录排序是否提前完成
for(int j=0; j<len-i-1; j++) // 因为后面的i个数据已经排序完成,所以不用进行比较,所以每次的比较次数为len-i-1
{
if(arr[j] > arr[j+1])
{
swap(arr[j], arr[j+1]);
flag = false;
}
}
if(flag) break; // 如果一次完整的排序过程中没有发生数据交换,标志位flag就是true,意味着排序已经完成,所以退出循环即可
}
}