快速排序【遞迴】【非遞迴】
單純記錄一下
Partition函式
int Partition(vector<int>& nums, int start, int end){
if(start==end){
return start;
}
int index = end;
int small = start-1;
for(int i=start;i<end;i++){
if(nums[i]<nums[index]){
small++;
if(i!=small){
swap(nums[i],nums[small]);
}
}
}
swap(nums[small+1],nums[end]);
return small+1;
}
遞迴QuickSort
void QuickSort_Recur(vector<int>& nums, int start, int end){
if(start>=end){
return;
}
int index = Partition(nums,start,end);
QuickSort_Recur(nums,start,index-1);
QuickSort_Recur(nums,index+1,end);
}
非遞迴QuickSort
void QuickSort_Loop(vector<int>& nums){
stack<int> indexs;
int start=0, end=nums.size()-1;
int index = Partition(nums,start,end);
if(start<index-1){
indexs.push(start);
indexs.push(index-1);
}
if(index+1<end){
indexs.push(index+1);
indexs.push(end);
}
while(!indexs.empty()){
int high = indexs.top();
indexs.pop();
int low = indexs.top();
indexs.pop();
int index = Partition(nums,low,high);
if(low<index-1){
indexs.push(low);
indexs.push(index-1);
}
if(index+1<high){
indexs.push(index+1);
indexs.push(high);
}
}
}
相關文章
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- 遞迴-*快速排序遞迴排序
- 快速排序-遞迴方式排序遞迴
- 歸併排序的非遞迴實現排序遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- 二十一、氣泡排序演算法——JAVA實現(遞迴與非遞迴)排序演算法Java遞迴
- 資料結構:歸併排序(非遞迴)資料結構排序遞迴
- Java不用遞迴的迭代快速排序示例Java遞迴排序
- 【C++】翻轉二叉樹(遞迴、非遞迴)C++二叉樹遞迴
- 遞迴和尾遞迴遞迴
- python-動態規劃的遞迴、非遞迴實現Python動態規劃遞迴
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- Vue3.0的遞迴監聽和非遞迴監聽Vue遞迴
- 二十、快速排序演算法——JAVA實現(遞迴)排序演算法Java遞迴
- 遞迴和非遞迴分別實現求n的階乘遞迴
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- 最新情報:所有的遞迴都可以改寫成非遞迴?遞迴
- 遞迴遞迴
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- 遞迴轉非遞迴 棧模擬 Recursive to Non-recursive stack simulated 總結遞迴
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- Python 八皇后解法(非遞迴版本)Python遞迴
- 歸併排序(C++_分治遞迴)排序C++遞迴
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- python實現二叉樹及其七種遍歷方式(遞迴+非遞迴)Python二叉樹遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 什麼是遞迴?遞迴和迴圈的異同遞迴
- js深度繼承的非遞迴方法JS繼承遞迴
- go 遞迴Go遞迴
- JavaScript遞迴JavaScript遞迴
- 分而治之-遞迴遞迴
- 理解遞迴遞迴
- python 遞迴樹狀結構 和 排序Python遞迴排序
- 五大演算法程式碼模板(DFS 遞迴非遞迴都算上,是六個)演算法遞迴
- 遞迴和遞推總結遞迴
- 演算法小專欄:遞迴與尾遞迴演算法遞迴