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 之前,則稱這種排序演算法是穩定的 否則稱為不穩定的。一 氣泡排序 氣泡排序的基本思想 每次比較...