幾種常用c語言的排序方法

2021-03-04 09:56:13 字數 2574 閱讀 8306

氣泡排序

基本概念

氣泡排序(bubblesort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:

首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。

在第二趟:仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到乙個新的最大數(其實在整個數列中是第二大的數)。如此下去,重複以上過程,直至最終完成排序。

由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上公升,所以稱作氣泡排序。

用二重迴圈實現,外迴圈變數設為i,內迴圈變數設為j。外迴圈重複9次,內迴圈依次重複9,8,...,1次。

每次進行比較的兩個元素都是與內迴圈j有關的,它們可以分別用a[j]和a[j+1]標識,i的值依次為1,2,...,9,對於每乙個i, j的值依次為1,2,...10-i。

產生  在許多程式設計中,我們需要將乙個數列進行排序,以方便統計,而氣泡排序一直由於其簡潔的思想方法而倍受青睞。

排序過程

設想被排序的陣列r[1..n]垂直豎立,將每個資料元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,從下往上掃瞄陣列r,凡掃瞄到違反本原則的輕氣泡,就使其向上"漂浮",如此反覆進行,直至最後任何兩個氣泡都是輕者在上,重者在下為止。

演算法示例

a[0] 、 a[1]、 a[2]、 a[3]、 a[4]、 a[5]、 a[6]:

49 38 65 97 76 13 27

第一趟氣泡排序過程

38 49 65 97 76 13 27

38 49 65 97 76 13 27

38 49 65 97 76 13 27

38 49 65 76 97 13 27

38 49 65 76 13 97 27

38 49 65 76 13 27 97 – 這是第一趟氣泡排序完的結果

第二趟也是重複上面的過程,只不過不需要比較最後那個數97,因為它已經是最大的

38 49 65 13 27 76 97 – 這是結果

第三趟繼續重複,但是不需要比較倒數2個數了

38 49 13 27 65 76 97

….// 經典氣泡排序

void bubblesort(int arr, int n)

快速排序演算法

演算法過程

設要排序的陣列是a[0]……a[n-1],首先任意選取乙個資料(通常選用第乙個資料)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。一趟快速排序的演算法是:

1)設定兩個變數i、j,排序開始的時候:i=0,j=n-1;

2)以第乙個陣列元素作為關鍵資料,賦值給key,即 key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j=j-1),找到第乙個小於key的值a[j],並與a[i]交換;

4)從i開始向後搜尋,即由前開始向後搜尋(i=i+1),找到第乙個大於key的a[i],與a[j]交換;

5)重複第3、4、5步,直到 i=j; (3,4步是在程式中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j+完成的最後另迴圈結束)

例如:待排序的陣列a的值分別是:(初始關鍵資料:x=49) 注意關鍵x永遠不變,永遠是和x進行比較,無論在什麼位子,最後的目的就是把x放在中間,小的放前面大的放後面。

a[0] 、 a[1]、 a[2]、 a[3]、 a[4]、 a[5]、 a[6]:

49 38 65 97 76 13 27

進行第一次交換後: 27 38 65 97 76 13 49

( 按照演算法的第三步從後面開始找)

進行第二次交換後: 27 38 49 97 76 13 65

( 按照演算法的第四步從前面開始找》x的值,65>49,兩者交換,此時:i=3 )

進行第三次交換後: 27 38 13 97 76 49 65

( 按照演算法的第五步將又一次執行演算法的第三步從後開始找

進行第四次交換後: 27 38 13 49 76 97 65

( 按照演算法的第四步從前面開始找大於x的值,97>49,兩者交換,此時:i=4,j=6 )

此時再執行第三步的時候就發現i=j,從而結束一趟快速排序,那麼經過一趟快速排序之後的結果是:27 38 13 49 76 97 65,即所以大於49的數全部在49的後面,所以小於49的數全部在49的前面。

快速排序就是遞迴呼叫此過程——在以49為中點分割這個資料序列,分別對前面一部分和後面一部分進行類似的快速排序,從而完成全部資料序列的快速排序,最後把此資料序列變成乙個有序的序列,根據這種思想對於上述陣列a的快速排序的全過程如圖6所示:

初始狀態

進行一次快速排序之後劃分為 49

分別對前後兩部分進行快速排序 經第三步和第四步交換後變成 完成排序。

經第三步和第四步交換後變成 完成排序。

// 快速排序的遞迴實現

void quicksort(int arr, int n)

C語言幾種排序方法介紹

作業內容 1 寫乙個函式實現插入排序 2 輸入乙個一維陣列資料,首先進行選擇排序,然後進行二分查詢。以上兩題任選一題完成,其中,插入排序 選擇排序 二分查詢的演算法思路如下。1 插入排序 1.1 演算法思路 插入排序演算法 insertion sort 首先將待排序的陣列 共n個元素 分成兩部分 第...

c語言中排序的實現方法有好幾種

c語言中排序的實現方法有好幾種.可以到百渡上去搜,會有不少答案的.給你提供幾個.希望對你有幫助.這是冒泡法的程式 include voidsort intarray,intsize voidmain sort a,10 for i 0 i 10 i printf 6d a i 這是選擇法的程式 in...

幾種常用的修辭方法

常見修辭方法主要有比喻 比擬 誇張 對偶 排比 設問和反問等幾種。下面逐一介紹。比喻 1.概念 比喻是 打比方 即兩種不同性質的事物,彼此有相似點,便用一事物來比方另一事物的修辭。比喻一般由三部分構成,即本體 被比喻的事物 喻體 作比喻的事物 和比喻詞 比喻關係的標誌性詞語 組成。2.構成比喻的必備...