下面是我的冒泡排序的代码:
1 /* 2 冒泡排序 3 */ 4 5 #include <stdio.h> 6 7 void main(){ 8 int array[2000]; 9 int numberCount; 10 int i; 11 int j; 12 int temp; 13 int flag; 14 15 printf("请为数组输入对应的数据(整型数)并且当输入-9999时结束输入的动作!\n\n "); 16 for(i=0;i<2000;i++){ 17 scanf("%d",&array[i]); 18 if(array[i]==-9999){break;} 19 } 20 21 numberCount=i; 22 printf("\n\n此数组中的有效数据有:%d 个!",numberCount); 23 24 //此段代码是整个冒泡排序的核心,有两层循环控制,外层控制冒泡的趟数,内层控制冒泡排序的规则 25 for(i=0;i<numberCount;i++){ 26 flag=0; 27 for(j=numberCount-1;j>=i+1;j--){//此句代码最为关键尤其是j>=i+1这一句, 28 //当然完全理解冒泡排序的原理代码还是比较简单的 29 if(array[j]<array[j-1]){ 30 temp=array[j]; 31 array[j]=array[j-1]; 32 array[j-1]=temp; 33 flag=1; 34 } 35 } 36 if(flag==0){break;} 37 } 38 39 printf("\n\n此数组经冒泡排序后的升序序列如下:\n\n "); 40 for(i=0;i<numberCount;i++){ 41 printf("%d ",array[i]); 42 } 43 44 printf("\n\n此数组经冒泡排序后的降序序列如下:\n\n "); 45 for(i=numberCount-1;i>=0;i--){ 46 printf("%d ",array[i]); 47 } 48 49 printf("\n\n"); 50 }
冒泡排序在我最初学习c语言的时候就敲过,不过时间一长就不能一下子搞定了,用自然语言描述的话其原理也是比较容易懂的!只是在控制内层的冒泡规则的时候要结合外层的循环控制变量,是一个比较不太好理解和容易出错的地方!不过总体而言理解其原理,多试几次多思考一些还是比较容易成功的实现冒泡排序的!
下面是补记的冒泡排序的基本思想:通过相邻元素之间的比较和交换,使关键字较小的元素逐渐从底部移向顶部,就像水底下的气泡一样逐渐向上冒泡,每趟的冒泡动作都使待排序的序列部分有序了,下次再冒泡时再次的扩大有序的部分,知道整个序列全部有序为止!
冒泡的现象很容易想象,转换成c语言的形式要注意的地方在代码中也已表明,此段代码还是比较容易的,当然,也需要练习练习,一气呵成一点没错也不是那么容易的!
鉴于水平有限难保不会出现错漏之处,如果你觉得那里有错误,请点击一下“反对”按钮,并希望您提出宝贵的修改意见,您的宝贵意见将是我们进步的一大源泉!
如果您觉得阅读上文对您有所帮助,请轻点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!