快速排序-QuickSort
来源:互联网 发布:淘宝怎么用余额宝分期 编辑:程序博客网 时间:2024/05/21 07:08
快速排序主要应用了分治的思想。
分治算法也叫分治策略,把输入分为若干个部分,递归的解每一个问题,最后将这些子问题合并成为一个全局解
分治模型在每一层递归上都有三个步骤:
-分解(Divide):将原问题分解成一系列子问题。
-解决(Conquer):递归的解各个子问题。若子问题足够小,则直接求解。
-合并(Combine):将子问题的结果合并成原问题的解。
快速排序的递归方法:
//分治的解决部分:partition函数
int partition(vector<int> &vec,int low,int high){ int comp=vec[low]; while(low<high){ while(low<high && vec[high] >= comp){ high--; } vec[low]=vec[high]; while(low<high && vec[low] <= comp){ low++; } vec[high]=vec[low]; } vec[low]=comp; return low;}
//分治的分解和合并:quickSort递归调用
void quickSort(vector<int> &vec,int low,int high){ if(low < high) { int middle = partition(vec, low, high); quickSort(vec, low, middle - 1); quickSort(vec, middle + 1, high); }}
快速排序的非递归方法:
//partition函数不变
……
//quickSort变成非递归
方法一、用栈模拟递归
void quickSort(vector<int> &vec,int low,int high){ stack<int> st; int middle,l,h; if(low<high){ st.push(low); st.push(high); } while(!st.empty()){ h = st.top(); st.pop(); l = st.top(); st.pop(); middle = patition(vec, l, h); if(l<middle-1){ st.push(l); st.push(middle-1); } if(middle+1 < h){ st.push(middle+1); st.push(h); } }}
方法二、用数组模拟栈,从而实现递归
void quickSort(int *a, int l, int h){ if (l>=h) return; int *s = new int[h-l+1]; //实现栈够用,因为存储的l,h索引在数组a的长度以内 int p = 0; s[p++] = l; s[p++] = h; int low,high,mid; while (p>0){ high = s[--p]; low = s[--p]; if(low<high) { mid = partition(a, low, high); if(low < mid-1){ s[p++] = low; s[p++] = mid -1; } if(mid+1 < high){ s[p++] = mid+1; s[p++] = high; } } } delete []s;}
0 0
- 快速排序-QuickSort
- 快速排序(quicksort)
- QuickSort(快速排序)
- 快速排序(quicksort)
- 快速排序QuickSort
- 快速排序(QuickSort)
- QuickSort(快速排序)
- 快速排序(quickSort)
- 快速排序(Quicksort)
- 快速排序 QuickSort
- 快速排序QuickSort.c
- Quicksort 快速排序源程序
- QuickSort 快速排序
- quicksort快速排序
- quicksort快速排序
- (C#)快速排序 Quicksort
- 快速排序算法QuickSort
- 快速排序(QuickSort)
- php/mysql实现搜索功能
- Html5拖放小例
- 过去是行不通的
- 剑指offer面试题28-字符串的排列
- 通过网络挖掘检测谣言和误信息(2015)
- 快速排序-QuickSort
- java中String 字符串中类的使用
- 从今天起开始认真学习C++primer plus
- 关于cocoapods中的一些细节问题
- mac os x使用Git简易入门教程
- Bug 9935857 - LOB indexes are missing from DBA_OBJECTS
- Google APAC 2016 University Graduates Test Round A解题报告
- 组合索引适用的情况
- HTTP请求报文和HTTP响应报文