氣泡排序 快速排序

2022-07-17 03:00:14 字數 3105 閱讀 7238

c 快速排序 

快速排序描述

1.從數列中挑出乙個元素,稱為 "基準"

(pivot)

2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。

3.遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

示例**

示例**為c語言,輸入引數中,需要排序的陣列為arr,取出乙個元素為pivot,並根據 pivot值,將陣列按照大於pivot和小於pivot分為兩個區域,遞迴完成排序。

複製**

1 #include 2 #include 3

4void quick_sort(char *arr, int begin, int

end) 5

18 arr[i] =pivot;

1920

if( i-1 >begin)

21 quick_sort(arr, begin, i - 1

);22

if( end > i + 1

)23 quick_sort(arr, i + 1

, end);24}

2526

intmain()

27複製**

輸出結果

abcdefghijklmnopqrstuvwxyz

演算法分析

最差時間複雜度 θ(n2) 最優時間複雜度 θ(nlog n) 平均時間複雜度 θ(nlog n)

原理  已知一組無序資料a[

1]、a[2]、……a[n],需將其按公升序排列。首先任取資料a[x]作為基準。比較a[x]與其它資料並排序,使a[x]排在資料的第k位,並且使a[1]~a[k-1]中的每乙個資料1]~a[n]中的每乙個資料》a[x],然後採用分治的策略分別對a[1]~a[k-1]和a[k+1]~a[n]兩組資料進行快速排序。

優劣  優點:極快,資料移動少;缺點:不穩定。

c 氣泡排序 

氣泡排序描述

氣泡排序(bubble sort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

氣泡排序對n個專案需要o(n2)的比較次數,且可以原地排序(

in-place)。儘管這個演算法是最簡單了解和實作的排序演算法之一,但它對於少數元素之外的數列排序是很沒有效率的。

氣泡排序是與插入排序擁有相等的執行時間,但是兩種法在需要的交換次數卻很大地不同。在最壞的情況,氣泡排序需要o(n2)次交換,而插入排序只要最多o(n)交換。天真的氣泡排序實作(類似下面)通常會對已經排序好的數列拙劣地執行(o(n2)),而插入排序在這個例子只需要o(n)個運算。因此很多現代的演算法教科書避免使用氣泡排序,而用插入排序取代之。氣泡排序如果能在內部迴圈第一次執行時,使用乙個旗標來表示有無需要交換的可能,也有可能把最好的複雜度降低到o(n)。在這個情況,在已經排序號的數列就無交換的需要。若在每次走訪數列時,把走訪順序和比較大小反過來,也可以些微地改進效率。

氣泡排序演算法的運作如下:

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

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

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

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

示例**

複製**

1 #include 2 #include 3

4void bubble_sort(int a, const

intsize) 5

19}20if

(flag)

21break;22

}23}24

25int

main()26;

28 bubble_sort(number, sizeof(int_array) / sizeof(int

));29

inti;

30for(i = 0; i < sizeof(int_array) / sizeof(int); i ++)

31 printf("

%d\n

", number[i]);32}

複製**

輸出結果

複製**01

2345

6789

複製**

原理已知一組無序資料a[

1]、a[2]、……a[n],需將其按公升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大於a[3]則交換兩者的值,否則不變。再比較a[3]與a[4],以此類推,最後比較a[n-1]與a[n]的值。這樣處理一輪後,a[n]的值一定是這組資料中最大的。再對a[1]~a[n-1]以相同方法處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。再對a[1]~a[n-2]以相同方法處理一輪,以此類推。共處理n-1輪後a[1]、a[2

]、……a[n]就以公升序排列了。

優劣  優點:穩定;缺點:慢,每次只能移動相鄰兩個資料。

排序 氣泡排序 快速排序

快速排序 氣泡排序就是自上向下依次對比兩個數字,若上面的數字大於下面的數字,則兩者交換,否則不交換。這樣每次迴圈結束,未排序的最大的數就到了最下面。如陣列前兩次迴圈過程如下 快速排序的核心是partition 函式,其功能如下所示 34的位置找到後,其將陣列分成兩部分,前一部分都比34小,後一部分都...

排序 氣泡排序 快速排序

1 基本思想 將第乙個記錄的關鍵字與第二個記錄的關鍵字比較,若為逆序,則將兩個記錄交換,再向後比較。關鍵字小的漂浮,關鍵字大的下沉。2 穩定性 演算法穩定。3 時間複雜度 o n 空間複雜度 o 1 4 實現 include define n 5 陣列長度上限 intmain printf 氣泡排序...

排序(氣泡排序 快速排序

關於排序的穩定性 在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中r i r j 且r i 在r j 之前,而在排序後的序列中,r i 仍在r j 之前,則稱這種排序演算法是穩定的 否則稱為不穩定的。一 氣泡排序 氣泡排序的基本思想 每次比較...