快速排序算法学习及C++代码实现
2018-03-16 17:06
381 查看
快速排序
基本思想
一种基于分治策略的排序算法,空间复杂度O(1),时间复杂度O(n log n) 1) 先选择出一个轴值,记为mid_point。这里我们就选择数组的最左边的值。 2) 分区,将大于mid_point的k个值放在右边区间,将小于mid_point的值放在左边区间 3) 分别对左右区间进行一二步的操作
实例
有如下的数组要用快速排序算法排序。a[10]={5,8,1,3,7,9,0,2,4,10}; 第一步,取数组最左边的值作为轴值 第二步,i=0,j=9,从数组最右边a[9]开始找到第一个比5小的值,将其填到5的位置a[0]。 我们发现a[8]满足条件。 此时数组a[10]={4,8,1,3,7,9,0,2,4,10} 第三步,从i=1开始往右找到第一个比5大的值,将其填到a[8]的位置。我们发现a[1]=8满足 此时数组a[10]={4,8,1,3,7,9,0,2,8,10} 第四步,从i=7开始往左找到比5小的值,将其填到a[1]的位置。我们看到a[7]满足 此时数组a[10]={4,2,1,3,7,9,0,2,8,10} 第五步,从i=2开始往右找到比5大的值a[4]将其填到a[7]的位置 此时数组a[10]={4,2,1,3,7,9,0,7,8,10} 第六步,从i=6开始往左找到比5小的值a[6]将其填到a[4]的位置 数组a[10]={4,2,1,3,0,9,0,7,8,10} 第七步,从i=5开始往右找到比五大的a[5]填到a[6]的位置 数组a[10]={4,2,1,3,0,9,9,7,8,10} 第八步,将五填到a[5]的位置 a[10]={4,2,1,3,0,5,9,7,8,10} 第九步,对数组的左右两部分分别进行上面的步骤
实现代码
#include<iostream> #include<vector> #include<algorithm> #include<conio.h> using namespace std; void QuickSort(vector<int>&m_vec, int l, int r); int main() { vector<int>m_vec = { 5,8,1,3,7,9,0,2,4,10 }; QuickSort(m_vec, 0, m_vec.size() - 1); for (auto beg=m_vec.cbegin();beg!=m_vec.cend();beg++) { cout << *beg << " "; } _getch(); return 0; } void QuickSort(vector<int>&m_vec, int l, int r) { if (l >= r) { return; } int i = l; int j = r; int m_mid = m_vec[i];//保存轴值 while (i<j) { while (i<j&&m_vec[j]>m_mid)//从右往左找到小于轴值得位置 { j--; } if (i<j) { m_vec[i++] = m_vec[j];//填坑 } while (i<j&&m_vec[i]<m_mid)//从左往右找到大于轴值得位置 { i++; } if (i<j) { m_vec[j--] = m_vec[i];//填坑 } } m_vec[i] = m_mid;//将轴值填到中间 QuickSort(m_vec, l, i-1);//递归处理左半边数组 QuickSort(m_vec, i + 1, r);//递归处理右半边数组 }
相关文章推荐
- C++ 语言实现 BP 神经网络实例,手把手一句一句敲代码实现训练学习,模式识别 - (1)
- C/C++中strlen(),strcpy(),strcat()以及strcmp()的代码实现--学习笔记
- 决策树学习 之 ID3 C++STL代码实现
- 经典算法学习————快速排序算法的c++实现
- 《机器学习》第三章决策树学习 ID3算法 c++实现代码
- 最近在研究enigma2的代码,那叫个庞大,C/C++写中间件,上层应用全部用python实现,可以学习一下plugin的实现机制了.
- 快速排序算法设计,C++实现代码
- 决策树学习 之 ID3 C++STL代码实现
- 深度学习之感知器AND(与)实现C++代码
- HEAD_FIRST设计模式学习 ----策略模式 c++简单实现代码
- 用C/C++实现SMC动态代码加密技术
- .NET Romoting 学习总结(三)—— Remoting技术之设计模式实现代码安全
- c++实现单向链表反转的学习总结
- 用C/C++实现SMC动态代码加密技术
- 《面向对象基础:C++实现》学习笔记之七
- 快速傅里叶变换(FFT)算法C++实现代码
- 《面向对象基础:C++实现》学习笔记之八
- 用C/C++实现代码的动态修改(SMC)
- 《面向对象基础:C++实现》学习笔记之六
- 三元组Triplet的C++代码(类)实现