百度百科给出的解释是:
冒泡排序:是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。
分析如下:
代码实现:
#include <stdio.h>
#include <stdlib.h>
#define LINE printf("-------------------%s-------------------\n",__FUNCTION__);
void swap(int* a,int* b){
int m = *a;
*a = *b;
*b = m;
}
void BubbleSort(int arr[],int len){
if(arr == NULL || len == 0){
return;
}
int j = 0;
int i = 0;
int flag = 0;//检测标志位,判断某次遍历是否交换值。
for(i = 0;i < len;i++){
flag = 0;
for(j = 0;j < len-i-1;j++){
if(arr[j] > arr[j+1]){//这是升序,降序的话改下符号即可
flag = 1;//如果交换的话,将标志位设为1
swap(&arr[j],&arr[j+1]);
}
}
if(flag == 0){//如果再一次遍历中没有交换任何一个值,那么证明此序列已经有序。
return;
}
}
}
void testBubbleSort(){
LINE;
int arr[] = {1,2,5,8,9,6,3,4,7,0};
int len = sizeof(arr)/sizeof(arr[0]);
int i = 0;
printf("sort before:");
for(;i < len;i++){
printf("%d ",arr[i]);
}
printf("\n");
BubbleSort(arr,len);
printf("sort after:");
for(i = 0;i < len;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
int main(){
testBubbleSort();
return 0;
}
实现结果: