C C 排序演算法(一)氣泡排序及兩種優化

2021-10-05 15:54:34 字數 1011 閱讀 5006

void

bubblesort

(int

*arr,

int length)}}

}

演算法步驟:

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

原始的氣泡排序是穩定排序。如果遇到最糟糕的情況,由於該排序演算法的每一輪要遍歷所有元素,輪轉的次數和元素數量相當,所以時間複雜度為o(n²)。

用arr測試上面的排序方式發現,第一趟排序後將10和9交換已經有序,接下來的8趟排序就是多餘的,浪費時間複雜度。所以我們可以在交換的地方加乙個標記,如果那一趟排序沒有交換元素,說明這組資料已經有序,不用再繼續比較交換了。

void

bubblesort

(int

*arr,

int length)}if

(nflags ==0)

break

;//如果沒有交換 則中斷迴圈

}}

設arr=

優化一僅僅適用於連片有序而整體無序的資料。但是對於前面大部分是無序而後邊小半部分有序的資料時排序效率也不太好,對於這種型別資料,我們可以繼續優化。即我們可以記下最後一次交換的位置,後邊沒有交換,必然是有序的,然後下一次排序從第乙個比較到上次記錄的位置結束即可。

void

bubblesort

(int

*arr,

int length)

} i = nlength-temp-1;

//下一次比較到記錄位置即可

if(nflags ==0)

break;}

}

兩種氣泡排序

泡泡往前冒 for int i 1 i score.length i 例如 for int i 1 i score.length i system.out.print 第 i 次排序的結果 for int j 0 j score.length j system.out.println for int...

兩種氣泡排序的比較及冒泡演算法優化

第一種 void bubblesort int array,int len if noswap break 第二種 void bubblesort int array,int len if noswap break 沒有優化 void bubblesort1 int arr,int len 沒有優化...

氣泡排序及兩種優化方式

定義 每一趟依次比較相鄰的兩個數,將小數放在前面,大數放在後面,直到一趟只剩下乙個元素。時間複雜度 o n 2 氣泡排序是最常用的小型資料排序方式,下面是用c語言實現的,及其兩種優化方式。第一種優化方式是設定乙個標記位來標記是否發生了交換,如果沒有發生交換就提前結束 第二種優化方式是記錄最後發生交換...