基本排序方法

2022-04-15 09:11:03 字數 3128 閱讀 8037

本文內容來自大牛robert sedgewick寫的《algorithms in c》一書和coursera上的大牛講的演算法課。

一.選擇排序(selection sort)

1.工作過程:首先,選出陣列中最小的元素,將它與陣列中第乙個元素交換。然後,再選出餘下陣列元素最小的,將它與陣列中第二個元素交換,以此類推,直到最後陣列中剩餘最後乙個未排序的元素,即完成。如圖1所示:

圖1.選擇排序

2.code:

1 #include2 #include3 #include

4 typedef int

item;

5#define key(a) (a)

6#define less(a,b) (key(a)7

#define exch(a,b)

8#define compexch(a,b) if(less(b,a)) exch(a,b)

9void selection(char s,int l,int r)//

l為陣列第乙個元素,r為陣列最後乙個元素

1019}20

int main(void)21

3.缺點:對有序的檔案和無序的檔案排序時間基本相同。

二.插入排序(insertion sort)

1.工作過程:在排序過程中當前索引左邊的元素都是排好序的,不過它們不是處於最終的位置上,因為之後他們還需要向右移動來為更小的元素騰出空間。當索引移動到最右邊時,即完成排序。如圖所示:

圖2.插入排序

2.code:

1 #include2 #include3 #include

4 typedef int

item;

5#define key(a) (a)

6#define less(a,b) (key(a)7

#define exch(a,b)

8#define compexch(a,b) if(less(b,a)) exch(a,b)

9void insertion(char s,int l,int

r)10

24 s[j]=v;25}

2627}28

int main(void)29

三.氣泡排序(bubble sort)1.工作過程:兩兩比較相鄰記錄的元素,當遇到最小的元素時,將它與左邊的元素逐個交換,直到將最小的元素移動到佇列的最左端,以此類推。氣泡排序實際上是一種選擇排序,但需要更多工作將每個元素放到合適的位置。在所有的比較操作中,最小的元素像是泡泡那樣「冒」到最前端。如圖3:

圖3.氣泡排序

2.code:

1 #include2 #include3 #include

4 typedef int

item;

5#define key(a) (a)

6#define less(a,b) (key(a)7

#define exch(a,b)

8#define compexch(a,b) if(less(b,a)) exch(a,b)

9void bubblesort(char s,int l,int

r)1021}

22}23int main(void)24

3.特點:容易實現,不過其執行速度比另外選擇和插入排序方法慢。

四.希爾排序(shellsort)

1.工作過程:插入排序執行效率低的原因是因為它所執行的交換操作涉及近鄰的元素,使得元素每次只能移動一位。希爾排序是插入排序的擴充套件,它通過允許非相鄰的元素進行交換來提高執行效率。在使檔案變成有序的時候,通過將較大的元素右移,把h子檔案中某些元素的前面。使用插入排序來完成這項工作,只是將移動的增量由1變為了h。h序列:3*h+1:1,4,13,40,121...。如圖4所示:

圖4.希爾排序

2.code:

1 #include2 #include3 #include

4 typedef int

item;

5#define key(a) (a)

6#define less(a,b) (key(a)7

#define exch(a,b)

8#define compexch(a,b) if(less(b,a)) exch(a,b)

9void shellsort(char s,int l,int

r)10

23 s[j]=v;24}

25 h/=3

;26 }while(h>0

);27}28

int main(void)29

3.特點:即使對於大檔案,希爾排序演算法都具有較高的執行效率以及**簡單易行,很多排序陳旭都選擇了希爾排序。

五.穩定

定義:如果排序後檔案中具有相同關鍵字的元素的相對位置保持不變,稱乙個排序方法是穩定的。

演算法排序2 基本排序方法1

下一章下面的 基本都是使用comparable 介面,使用這個介面實現了主鍵的抽象,它給出了實現這個介面資料型別的物件的大小順序的定義。但是,不是每次都要使用這個介面,因為陣列元素的主鍵很可能只是每個元素的一小部分 概念 首先找到陣列中最小的元素,其次,將它和陣列的第乙個元素交換位置 如果第乙個元素...

三種基本排序方法

三種基本排序方法 includevoid func1 int a 10 交換排序法 void func2 int a 10 選擇排序法 void func3 int a 10 氣泡排序 int main int choice printf 請輸入你要選擇的排序方法 n scanf d choice ...

幾個基本的前端排序方法

1.氣泡排序 測試一下 bubble sort arr log 8,9,12,14,15,23,33,45,89 2.快速排序 演算法實現 1.在資料集之中,選擇乙個元素作為 基準 pivot 2.所有小於 基準 的元素,都移到 基準 的左邊 所有大於 基準 的元素,都移到 基準 的右邊。這個操作稱...