個人認為,快排對於剛剛接觸演算法的同學還是比較困難的。具體思路不難理解,**的編寫就不是那麼容易了。
通過乙個示例來說一下具體思路:
1、將一行雜亂的數由下標1開始存入a陣列: 256,301,751,129,937,863,742,694,076,438
2、第一次迴圈:現將第乙個數作為關鍵字存入a[0](此時是256),開始比較。先從最後找出乙個比a[0]大的數
(此時是438)存
入剛剛已
經將數轉移到a[0]中的a[1](覆蓋掉256),此時數字為438的地方(a[10])與前面a[1]是相同的,所以繼續從前面找乙個比a[0]小的數存入a[10](覆蓋掉438)......,以此類推,總是在最後向前找最大,從前向後找最小,直到兩個標記指標low和high相等,第一次迴圈結束。
第一次迴圈結束後陣列狀態為:076,129, | 256 |, 751, 937, 863, 742, 694, 301, 438
3、此時由上面第一次的關鍵字256為界限將整個陣列分為了兩部分。256之前都是比它小的,之後都是比它大的。帶**中運用遞迴實現。
第二次迴圈結束後陣列狀態為:076,129, 256 , 438, 301, 694, 742, | 751 |, 863, 937
4、此時又以關鍵字751為界限分為兩部分。
5、迴圈下去、直到前標記下標low和後標記下標high相等時,迴圈全部結束,排序完成。
6、時間複雜度在:o(nlog2n) 左右 空間複雜度:o(log2n)
例題:sdut oj sdut_2014級寒假集訓之排序 c題
山東理工大學有很多學生,當然也有很多美女,機械實驗班的學委(外號:大王八)很想找個女朋友,但他想找個身高和自己相配的女生坐女朋友,現有理工大n個美女的身高資料,但由於n的值較大,為了盡快找到合適的女友,大王八想請你幫他完成這n個美女的身高排序,按降序排列。
輸入包括兩行,第一行是乙個正整數n(n<=1000000),表示理工大共n個美女。第二行有n個正整數分別表示n位美女的身高,每個正整數的值不會超過10^9。 (輸入資料之間會用空格隔開)
輸出只有一行,為這n個數的降序序列,數與數之間用空格隔開。
51 3 2 5 4
5 4 3 2 1
#include#define d 1000100
int a[d];
int partition(int *a,int low,int high)
int main()
printf("\n");
return 0;
}
SDUT 3808 離散題目14
problem description 判斷集合是不是對稱的。input 首先輸入兩個數n,m表示集合中元素的個數,以及存在的關係數。接下來1行包含n個以空格分隔的整數。接下來m行,每行包含兩個數a,b表示關係。1 n 1000,1 a,b n,m n n 1 m 1000 output 對於每組輸...
14 塊級元素和行內元素
學習的初期,我們就要知道,標準文件流等級森嚴。標籤分為兩種等級 比如h1標籤和span,同時設定寬高,來看瀏覽器效果,那麼你會發現 行內元素和塊級元素的區別 非常重要 行內元素 塊級元素 塊級元素和行內元素的分類 在以前的html知識中,我們已經將標籤分過類,當時分為了 文本級 容器級。從html的...
14 塊級元素和行內元素
學習的初期,我們就要知道,標準文件流等級森嚴。標籤分為兩種等級 比如h1標籤和span,同時設定寬高,來看瀏覽器效果,那麼你會發現 行內元素和塊級元素的區別 非常重要 行內元素 塊級元素 塊級元素和行內元素的分類 在以前的html知識中,我們已經將標籤分過類,當時分為了 文本級 容器級。從html的...