深度冒泡排序(元素從小到大排序)
例如:arr[ ]裏的元素爲 9 5 6 8 4 3 1 7 2
在第一次排序時,先比較前兩個元素的大小,如果第一個元素大於第二個元素則兩個交換,繼續比較第二個和第三個。以此類推,當倒數第二個和最後一個比較完就把最大的那個元素交換到了最後一位(最多交換了n-1次)
當把最大的交換到最後一位後,接下來就要把次高位的元素放大倒數第二位了。和前面一樣只需要比較相鄰元素,把大的交換到後面就行了。當比較完倒數第三位和倒數第二位時,就不用再比較後面兩位了(最後一位已經放的是最大數了) ,所以總共比較了n-2次
可以發現排一次序,相鄰元素就會少比較一次,一直到只剩下第一位和第二位比較的時候,整個排序結束。所以總共排了N-1次序。
接下來到代碼中來實現!
- #include <windows.h>
- #include <stdio.h>
- int main()
- {
- int arr[] = {9,5,6,8,4,3,1,7,2};
- int i = 0;
- int j = 0;
- int sz = sizeof(arr)/sizeof(arr[0]); //數組的大小
- for(i=0; i<sz-1; i++) //外循環判斷排序的次數
- {
- for(j=0; j<sz-1-i; j++) //內循環判斷相鄰元素交換的次數
- {
- if(arr[j]>arr[j+1])
- {
- int tmp = arr[j];
- arr[j] = arr[j+1];
- arr[j+1] = tmp;
- }
- }
- }
- for(i=0; i<sz; i++)
- {
- printf("%d ",arr[i]);
- }
- printf("\n");
- system("pause");
- return 0;
- }