C程序下的深度冒泡排序

深度冒泡排序(元素从小到大排序)


例如:arr[ ]里的元素为    9  5  6  8  4  3  1  7  2

在第一次排序时,先比较前两个元素的大小,如果第一个元素大于第二个元素则两个交换,继续比较第二个和第三个。以此类推,当倒数第二个和最后一个比较完就把最大的那个元素交换到了最后一位(最多交换了n-1次)

当把最大的交换到最后一位后,接下来就要把次高位的元素放大倒数第二位了。和前面一样只需要比较相邻元素,把大的交换到后面就行了。当比较完倒数第三位和倒数第二位时,就不用再比较后面两位了(最后一位已经放的是最大数了) ,所以总共比较了n-2次


可以发现排一次序,相邻元素就会少比较一次,一直到只剩下第一位和第二位比较的时候,整个排序结束。所以总共排了N-1次序。


接下来到代码中来实现!


[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. #include <windows.h>  
  2. #include <stdio.h>  
  3.   
  4. int main()  
  5. {  
  6.     int arr[] = {9,5,6,8,4,3,1,7,2};   
  7.     int i = 0;  
  8.     int j = 0;  
  9.     int sz = sizeof(arr)/sizeof(arr[0]); //数组的大小  
  10.     for(i=0; i<sz-1; i++)   //外循环判断排序的次数  
  11.     {  
  12.         for(j=0; j<sz-1-i; j++) //内循环判断相邻元素交换的次数  
  13.         {  
  14.             if(arr[j]>arr[j+1])  
  15.             {  
  16.                 int tmp = arr[j];  
  17.                 arr[j] = arr[j+1];  
  18.                 arr[j+1] = tmp;  
  19.             }  
  20.         }  
  21.     }         
  22.     for(i=0; i<sz; i++)  
  23.     {  
  24.         printf("%d  ",arr[i]);  
  25.     }  
  26.     printf("\n");  
  27.     system("pause");  
  28.     return 0;  
  29. }  

                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值