快速排序
Posted qunxuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。
稳定性:不稳定排序
1. 过程介绍
快速排序是考察次数最多的排序,无论是在大学专业课的期末考试,还是在公司的面试测试题目中,快速排序都极大的被使用,在实际中快速排序也极大的被使用,如STL中的sort底层就是一个快速排序。
首先在数组中选择一个基准点,然后分别从数组的两端扫描数组,设两个指示标志(low指向起始位置,high指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换low和high位置的值,然后从前半部分开始扫描,发现有元素大于基准点的值,就交换low和high位置的值,如此往复循环,直到low>=high,然后把基准点的值放到high这个位置。一次排序就完成了。
以后采用递归的方式分别对前半部分和后半部分排序,当前半部分和后半部分均有序时该数组就自然有序了。
2.图示过程
可以看出,在第四躺时已经达到顺序,但是任还是会继续计算几趟直到完成全部运算
第一趟 |
70 |
50 |
30 |
20 |
10 |
70 |
40 |
60 |
第二趟 |
60 |
50 |
30 |
20 |
10 |
40 |
70 |
70 |
第三趟 |
40 |
50 |
30 |
20 |
10 |
60 |
70 |
70 |
第四趟 |
10 |
20 |
30 |
40 |
50 |
60 |
70 |
70 |
第五趟 |
10 |
20 |
30 |
40 |
50 |
60 |
70 |
70 |
3. 相关的代码
1 #include<iostream> 2 using namespace std; 3 4 void qucik_sort(int a[],int low,int high) { 5 int i,j,temp; 6 i=low; 7 j=high; 8 if(low<high) { 9 temp=a[low]; //设置枢轴 10 while(i!=j) { 11 while(j>i&&a[j]>=temp) { 12 --j; 13 } 14 if(i<j) { 15 a[i]=a[j]; 16 ++i; 17 } 18 19 while(i<j&&a[i]<temp) { 20 ++i; 21 } 22 if(i<j) { 23 a[j]=a[i]; 24 --j; 25 } 26 } 27 a[i]=temp; 28 qucik_sort(a,low,i-1); 29 qucik_sort(a,i+1,high); 30 } 31 } 32 33 int main() { 34 int a[8]= {70,50,30,20,10,70,40,60}; 35 int n=8; 36 qucik_sort(a,0,n-1); 37 for(int i=0; i<n; i++) { 38 cout<<a[i]<<‘ ‘; 39 } 40 return 0; 41 }
输出:
1 10 20 30 40 50 60 70 70
以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章