快速排序 quicksort 演算法實現

2021-09-22 06:09:18 字數 1748 閱讀 5675

快速排序(quicksort)是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元 素都比x小(從大到小排序)。然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。

快速排序演算法如下

void quicksort(

int a, 

int p, 

int r)

}其中partition函式將得到x所在的位置i(在這裡總以陣列的最後乙個元素為軸)。

int partition(

int a, 

int p, 

int r)

}

swap(&a[i + 

1], &a[r]);

return i + 1;}

由於總是選擇陣列的最後乙個元素做為軸,因此可能出現x的左邊為n - 1或接近n - 1個元素,而右邊沒有元素,或元素很少的情況,即x最大或比較大。這樣使quicksort將出現最壞的情況,也就是時間複雜度為

o(n^2)。因此partition可以採用隨機方式得到軸x的位置i。 這樣它的平均情況是非常好的(時間複雜度為

o(nlogn)),也就是說,最壞情況很難出現。

int new_random(

int min, 

int max)

int randomize_partition(

int a, 

int p, 

int r)

完整的**如下

#include 

#include 

void out_int_array(

int data, 

int n)

printf(

"\n");

}void swap(

int *a, 

int *b)

int new_random(

int min, 

int max)

int partition(

int a, 

int p, 

int r)

}

swap(&a[i + 

1], &a[r]);

return i + 1;}

void quicksort(

int a, 

int p, 

int r)

}int randomize_partition(

int a, 

int p, 

int r)

void randomize_quicksort(

int a, 

int p, 

int r)

}int main()

;int b = ;

out_int_array(a, 

7);quicksort(a, 

0, 6);

out_int_array(a, 

7);printf(

"--------------------------randomize-----------------------------\n

");   

srand((unsigned)time( null ));

randomize_quicksort(b, 

0, 6);

out_int_array(b, 

7);return

0; }

銀河使者

快速排序演算法QuickSort

quicksort.cpp 定義控制台應用程式的入口點。快速排序演算法實現 設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用第乙個資料 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。然後,對前面部分比它小的數繼續進行快速排序 ...

演算法 快速排序 quick sort

在前面介紹的排序演算法中,最快的排序演算法為歸併排序,但是歸併排序有乙個缺陷就是排序過程中需要o n 的額外空間。本文介紹的快速排序演算法時一種原地排序演算法,所需的額外空間複雜度為o 1 演算法介紹 快速排序其實一種根據需找某個元素的具體位置進行排序的方法。比如所存在如下陣列 選擇第乙個元素5,找...

演算法 快速排序(Quick Sort)

演算法定義 目前學習是五種排序 冒泡 插入 選擇 合併 快速 中,快速排序是最讓我喜歡的演算法 因為我想不到 其定義如下 演算法舉例 5,4,3,2,1 5,4,3,2,1 4,5,3,2,1 1,5,3,2,4 1,4,3,2,5 1,2,3,4,5 演算法實現 1 using system 2u...