這個快速排序演算法是對前面的 快速排序演算法quicksort 一種改進。
只是修改了int partition(int arry,int start,int end)這個方法。
仔細觀察我們可以發現,我們前面partition方法中,都需要swap(arry,start,end),
但是這一步中有些步驟是可以省略的。
在(因為當前的arry[start]是值就是pivot ;
在(start->)過程中,碰到第乙個大於等於pivot的元素之,只需要進行一次賦值arry[end]=arry[start];
因為當前的arry[end]的值就是pivot的值。
整個過程中,不是start就是end指向pivot所儲存的單元 ,所以在整個過程中,pivot沒有必要每次通過swap來儲存,只需要在最後找到pivotkey的時候,
令arry[pivotkey]=pivot即可。
具體修改如下**例項。
view code
#include今天發現以前一直以為對的快排寫錯了,因此沒有考慮需要排序的數相等的情況,如果排序的陣列中有相同的數,那麼就會出現死迴圈,一直沒有結果,要做的修改就是修改partition函式,修改以後如下:#include
#include
using
namespace std;
#define maxnum 100
/*改進的int partition(int arry,int start,int end)
仔細觀察我們可以發現,我們前面partition方法中,都需要swap(arry,start,end),
但是這一步中有些步驟是可以省略的。
在(因為當前的arry[start]是值就是pivot
在(start->)過程中,碰到第乙個大於等於pivot的元素之,只需要進行一次賦值arry[end]=arry[start];
因為當前的arry[end]的值就是pivot的值,
整個過程中,不是start就是end指向pivot所儲存的單元
所以在整個過程中,pivot沒有必要每次通過swap來儲存,只需要在最後找到pivotkey的時候,
令arry[pivotkey]=pivot即可。
*/int partition(int arry,int start,int end)
void qsort(int arry,int start,int end)
}void quicksort(int arry,int len)
void main()
;srand(time(null));
cout<
輸入隨機數組長度n:
"<>n;
cout<
生成長度為
"的100以內的隨機數組
"排序前:
"cout
排序後:
"cout
pause
");}
/*輸入隨機數組長度n:
10生成長度為10的100以內的隨機數組
排序前:
91 67 99 37 40 70 49 71 43 42
排序後:
37 40 42 43 49 67 70 71 91 99
請按任意鍵繼續. . .
*/
view code
int partition(int arry,int start,int做的唯一修改就是將原來的arry[end]>pivot改為arry[end]>=pivot,arry[start]end)
arry[start]=pivot;
/*cout<
return
start;
}
view code
#include#includeusing
namespace
std;
int partition(int arry,int start,int
end)
arry[start]=pivot;
return start;//
此時start=end,所以返回start跟返回end一樣。
}void quicksort(int arry,int start,int
end)
void printarry(int arry,int
len)
intmain()
;
int len=sizeof(arry)/sizeof(int);//
求陣列長度
quicksort(arry,0,len-1);//
快排 printarry(arry,len);//
列印陣列
system("
pause");
return0;
}
快速排序演算法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...