冒泡法排序:指的是在排序时,从前往后扫描待排序记录,每次比较数组中相邻的两个数组元素的值,将较小的数(按从小到大排列)排在较大的数前面。
例子:将9,6,15,4,2从小到大进行排列。
过程:第一趟将9与后面元素比较得到:6,9,4,2,15
第二趟将6与后面元素比较得到:6,4,2,9,15
第三趟将6与后面元素比较得到:4,2,6,9,15
第四趟将4与后面元素比较得到:2,4,6,9,15
思考:一共有5个元素比较了4趟,第一趟比较了4次确定了最大的值,第二趟比较了三次确定了倒数第二个值,以此类推,每趟比较的次数比上一次少1。设i为躺数,len为元素个数,j为每一趟的执行次数,则:i<len-1 j<len-1-i
代码实现:
#include<stdio.h> int main() { int arr[]={9,6,15,4,2}; int i,j; printf("排序前:\n"); int len=sizeof(arr)/sizeof(arr[0]); for( i=0;i<len;i++) { printf("%d ",arr[i]); } printf("\n"); for(i=0;i<len-1;i++) { for(j=0;j<len-1-i;j++) { if(arr[j]>arr[j+1]) { int t=arr[j]; arr[j]=arr[j+1]; arr[j+1]=t; } } } printf("排序后:\n"); for(i=0;i<len;i++) { printf("%d ",arr[i]); } printf("\n"); return 0; }
运行结果: