C程序下的深度冒泡排序

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


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

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

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


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


接下来到代码中来实现!


  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. }  

                  

发布了43 篇原创文章 · 获赞 47 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章