排序演算法(Sorting Algorithm)

2021-09-29 16:31:43 字數 3321 閱讀 4462

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀演算法,得經過大量的推理和分析。

排序步驟

從陣列的第乙個數arr[0]開始遍歷,(i從0到n-1)如果第i個數比第i+1個數大arr[i]>arr[i+1],則交換

重複上述步驟直至陣列有序 分析

氣泡排序可以說是最簡單的排序方法之一,最壞的情況需要排n-1趟。我們可以設定乙個flag來監測排序過程中是否產生的數的交換,如果沒有,說明陣列已經有序,則可以不用進行下一趟排序。

c語言實現

void

bubble_sort

(int arr,

int n)if(

!flag)

return;}

}

排序步驟

在當前區域(記為area)(area初始為整個無序陣列)選定乙個數作為基準數(記為key)

遍歷陣列,把所有大於key的數(記為high)放在右邊,把所有小於key的數(記為low)放在左邊(並不關心這些數是否有序)

key放在lowhigh的中間

現在area又被分為三個區域,lowkeyhigh,分別選擇lowhigh作為新的area,分別重複上述流程

原理分析

每次我們在當前area中把所有數以key為中間數擺放好,實質上就是在整個陣列中確定好了key這個數最終的位置,左邊的數都比key小,右邊的數都比key大。不斷重複這個過程那麼最終所有數都必將擺在最終的位置

手動排序示例

下面是乙個無序陣列:

8 ,5, 2, 3,-1 , 7

當前area為[0] ~ [5] (陣列編號)我們選擇中間的乙個數2作為本輪的key

從兩端開始找:

7key大,沒毛病

-1key小,扔到最左邊,現在陣列:

-1,5, 2, 3,87

移動過的數比過大小沒移動的數都是已處理的數(我用粗體標記了),待在了自己該待在的區域,因此我們不需要對這些數再進行操作,也不應該用其他的數來填充他們的位置,因為我們不關心他們之間是否有序,只關心他們和key的位置關係是否正確

然後我們從左邊開始找,(如果繼續從右邊找會重複工作,不信你可以動手試一下)

-1是剛剛丟過來的,不用管

5key大,移動到未處理的最右邊:

-1,3,2,587

我們並沒有檢查交換過來的數和key的關係,因此交換過來的數是未處理的數

繼續,2等於key,移到左邊:(等號的情況必須得移動,不然key的位置就被固定了!但比key小的數在key左邊不一定放的下)

-12,3,587

最後3的位置是在2右邊的,不需要動,第一趟完成,現在[0]是low,[2]~[5]high

因為low只有乙個數,不需要繼續處理

現在high是新的area:

3,5,8 ,7

為了展示key的選取不影響排序結果(雖然影響排序效率),我們選擇第乙個數3作為key

那麼跑完整個流程,所有的數都大於等於3,這次就沒有low區域了

選擇新的high作為area

5, 8, 7

這次又隨機選,選最後乙個數7(讀者可以自行嘗試選取其他的key進行排序)

7不動,8key

5, 7, 8

到這顯而易見已經完成了

c語言實現

void

quick_sort

(int arr,

int l,

int r)

arr[i]

=key;

quick_sort

(arr,l,i-1)

;quick_sort

(arr,i+

1,r)

;}

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...

排序演算法 排序演算法彙總

排序演算法無疑是學習資料結構中的重點內容,本文將給出排序演算法的彙總。下面是具體的實現 include include include define n 1000000 int array n int temp n 1 氣泡排序 void bubblesort int a,int n if tag ...