冒泡排序的方法很简单,例如有一个数组 arr[] = {8,6,10,2,5};
用冒泡排序的思维,就需要进行4轮比较
第一轮:
从index为0开始,取出相邻的两个元素进行比较,若前一个大,交换位置,若后一个大,位置不变。index依次往下,两两相比。
首先,8和6比较,8大,数组中元素进行交换,{6,8,10,2,5}
然后8和10比较,8小,数组不变
然后10和2比较,10大,进行交换,{6,8,2,10,5}
然后10和5比较,10大,进行交换,{6,8,2,5,10}
第一轮结束,此时,最大的数字已经确定,第二轮就是比较剩下的4个数字。
依此类推,第二轮:
首先比较6和8,6小,数组不变
然后比较8和2,8大,位置交换,{6,2,8,5,10}
然后比较8和5,8大,位置交换,{6,2,5,8,10}
此时,此轮最大数字确定,第三轮,就是比较剩下的3个数字。
.....
按照这种思维,就是冒泡排序,用C实现的代码如下:
#include <stdio.h>
void bubbleSort(int arr[], int count);
int main() {
int acker[] = {6,23,8,12,87,65,31,19,3,5,25,101,56,47};
int len = sizeof(acker)/sizeof(acker[0]);
bubbleSort(acker,len-1);
int h = 0;
for( h=0; h<len; h++){
printf("%d ", acker[h]);
}
return 0;
}
void bubbleSort(int arr[], int count){
int i = 0;
for( i=count; i>0; i--){ //因为len=15,所以要进行14轮的比较
int j = 0; //每轮比较确定一个最大数,所以每轮进入比较的元素是递减的
for( j=0; j<i; j++){ //i 是还要进行的轮数,j是此轮比较的最大元素的index-1
int t = 0;
if( arr[j] > arr[j+1] ){
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
}