godtrue

下面是我的冒泡排序的代码:

 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语言的形式要注意的地方在代码中也已表明,此段代码还是比较容易的,当然,也需要练习练习,一气呵成一点没错也不是那么容易的!

posted on 2013-09-05 22:56  godtrue  阅读(971)  评论(0编辑  收藏  举报