排序的演算法有很多,例如直接插入排序,希爾排序,氣泡排序,選擇排序,快速排序,堆排序等等。最簡單基礎就是氣泡排序了,關於排序hi有乙個系列。今天是第一篇,主要講氣泡排序演算法思想以及從各個方面對它進行優化。
氣泡排序:
原理舉例:設陣列長度為n。
1.比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。
2.這樣對陣列的第0個資料到n-1個資料進行一次遍歷後,最大的乙個資料就「沉」到陣列第n-1個位置。
3.n=n-1,如果n不為0就重複前面二步,否則排序完成。如下圖所示:
下面來用**實現上圖所示的演算法:
void bubblesort(int *a,size_t size)
} }}
這樣的方法雖然可以做到給排序,但是效率很低,如果只排了兩次就有序了,但程式還是會老老實實的把size-1次迴圈都走完,所以可以對這樣的程式進行優化,設定乙個標誌位,將它置為0,每次迴圈中,如果程式發生了交換,就將標誌位置為1,在每次迴圈中讓if條件做乙個判斷,如果標誌位為0就說明資料沒有發生交換,證明它已經有序了,就可以將程式退出迴圈
**實現是這樣的
void bubblesort(int *a,size_t size)
} if (flag == 0)//判斷標誌位是否為0,如果為0,就直接return}}
這樣寫就能比第一次實現的高效很多,但是還有優化的餘地,如果發生了交換,記住每次每趟排序中最後一次交換的位置,下次比較到最後一次交換的位置就可以了,
**實現:
void bubblesort(int *a, size_t size)
}k = pos;
if (flag == 0)}}
排序演算法(一) 氣泡排序
排序思路 樣例 1.從首位元素開始,前後元素相比較,保證 小在前 大在後 逐個元素向後遞推。一遍結束後,最大元素將位於排序末位。16 35 9 35 5 35 20 35 結果 2.因為最大元素已經排位完畢,所以不考慮末位最大元素,從頭開始,再做一輪排序。排序範圍 結果 可以看出,第二大元素已經排至...
排序演算法(一)氣泡排序
氣泡排序 bubble sort,台灣譯為 泡沫排序或氣泡排序 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。以將陣列 number n 中的n個數從小到大排序為例 ...
排序演算法一(氣泡排序)
氣泡排序。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有 再需要交換,也就是說該數列已經排序完成。假設有乙個無序序列 第一趟排序 通過兩兩比較,找到第一小的數值 1 將其放在序列的第一位。第二趟排序 通過兩兩比較,找到第二小的數值...