C语音学习(三)冒泡排序和选择排序

冒泡排序的程序如下:

 1 #include <stdio.h>
  2 int main()
  3 {
  4     int a[10] = {10,9,8,7,6,5,4,3,2,1};
  5     int len = sizeof(a) / sizeof(int);
  6 
  7     int i,j;
  8     for(i = 0;i < len-1;i++)
  9     {
 10         for(j = 0;j < len-i-1;j++)
 11         {
 12             if (a[j] > a[j+1])
 13             {
 14                 int temp = a[j];
 15                 a[j] = a[j+1];
 16                 a[j+1] = temp;
 17             }
 18         }
 19         for(j = 0;j < 10;j++)
 20         {
 21             printf("%d ",a[j]);
 22         }
 23         printf("\n");
 24 
 25     }
 26     return 0;
 27 }

冒泡排序的原理是:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个元素。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

选择排序的程序如下:


 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     int a[10]={10,9,8,7,6,5,4,3,2,1};
  6     int len = sizeof(a) / sizeof(int);
  7 
  8     int i,j;
  9     int min;
 10 
 11     for(i = 0;i < len ;i++)
 12     {
 13         min = i;
 14         for(j = i + 1;j < len;j++)
 15         {
 16             if (a[j] < a[min])
 17             {
 18                 min = j;
 19             }
 20         }
 21             int t;
 22             t = a[i];
 23             a[i] = a[min];
 24             a[min] = t;
 25         if(i >= len / 2)
 26         {
 27             break;
 28         }
 29
 30         for(j =0;j < 10;j++)
 31         {
 32             printf(" %d",a[j]);
 33         }
 34         printf("\n");
 35     }
 36 
 37 
 38 
 39     return 0;
 40 }

选择排序的原理是:

1.在数组的所有元素中挑选出一个最小的元素,将它与排在无序位第一个的元素交换。

2.在挑选出最小的元素并放在第一位以后,继续对剩下的元素进行挑选,挑选出除了第一位之外最小的元素。

3.重复1的操作,直到所有的元素按顺序排好,打印出所有结果。

 1     for(i = 0;i < len ;i++)
 2     {
 3         min = i;
 4         for(j = i + 1;j < len;j++)
 5         {
 6             if (a[j] < a[min])
 7             {
 8                 min = j;
 9             }

这一部分主要是对数组下标进行判断,一开始i=0,也就是认为a[0] = a[min]。下一步进行判断,由于j=i+1,a【j】即代表a【i】的下一位,如果a【j】<a【min】,这时候就认为a【min】=a【j】,重复此操作,直到挑选出最小的那个元素,在本题中最小的元素即为1。

挑选出最小的元素后,如果a【i】=a【min】,则无需互换,如果a【i】!=a【min】,则将a【i】和a【min】互换位置,也就是执行下面的程序:

 if(min != i)
           {
               int t;
               t = a[i];
               a[i] = a[min];
               a[min] = t;
           }

重复上述步骤,直到按顺序排好,打印出所有过程。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值