快速排序法是對氣泡排序的一種改進,本來是要和氣泡排序寫在乙個文章裡的,不過前兩天剛開始在遞迴呼叫的時候沒有完全理解,昨天晚上google了一把發現原來自己理解錯了,我看的這個教材沒有寫清楚,今天早上除錯了一把終於成功。
快速排序演算法的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。快速排序使用分治策略來把待排序資料序列分為兩個子串行,具體步驟為:(1
)從數列中挑出乙個元素,稱該元素為「基準」。(2
)掃瞄一遍數列,將所有比「基準」小的元素排在基準前面,所有比「基準」大的元素排在基準後面。(3
)通過遞迴,將各子串行劃分為更小的序列,直到把小於基準值元素的子數列和大於基準值元素的子數列排序。
上圖中只是以69為基準數的兩個步驟的圖示,其實一遍下來以後,應該是比69小的都排在它左邊,比69大的都排在它的右邊。
具體**如下:
1 #include 2 #include "createdata.c
" //生成隨機數檔案34
#define maxsize 1056
//快速排序分割出基準數下標
7int partition(int a,int left,int
right)
1920 a[left] = base; //
儲存基準數
2122
return
left;23}
2425
//快速排序演算法實現
26void quicksort(int a,int left,int
right)35}
3637
intmain()
4546 printf("
排序前:");
47for(i = 0 ; i)
48 printf("
%d "
,a[i]);
4950 quicksort(a,0,maxsize-1
);
5152 printf("
\n排序後:");
53for(i = 0 ; i)
54 printf("
%d "
,a[i]);
5556
return1;
57 }
時間複雜度:o(n*lgn)最壞:o(n^2)
空間複雜度:o(n*lgn)
快速排序對包含n個數的輸入陣列,平均時間為o(nlgn),最壞情況是o(n^2)。
通常是用於排序的最佳選擇。因為,基於比較的排序,最快也只能達到o(nlgn)。
排序演算法4 快速排序
編寫乙份快速排序,完成對元素序列37,19,43,22,22,89,26,92按照從小到大順序排列。演算法思想 快速排序是氣泡排序演算法的改進,也屬於交換型別的排序演算法,它的基本思想描述如下 1 從第j個元素開始向前依次將每個元素與樞軸元素pivot比較。如果當前元素大於pivot,則比較前乙個元...
排序演算法 4 快速排序
快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 nlogn 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 nlogn 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實現出來。快速排序...
演算法 4 快速排序
從圖中我們可以看到 left指標,right指標,base參照數。其實思想是蠻簡單的,就是通過第一遍的遍歷 讓left和right指標重合 來找到陣列的切割點。第一步 首先我們從陣列的left位置取出該數 20 作為基準 base 參照物。第二步 從陣列的right位置向前找,一直找到比 base ...