Theory:
快排的基本思想:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
Implement:
#include<iostream>
using namespace std;
void quick_sort(int array[], int start, int last)
{
int i = start;
int j = last;
if (i < j)
{
int temp = array[i];
while (i < j)
{
while (i < j && array[j]>=temp )
j--;
if (i < j)
{
array[i] = array[j];
i++;
}
while (i < j && temp > array[i])
i++;
if (i < j)
{
array[j] = array[i];
j--;
}
}
//把基准数放到i位置
array[i] = temp;
quick_sort(array, start, i - 1);
quick_sort(array, i + 1, last);
}
}
int main()
{
int array[]={12,345,545,123,45,10,8,23,1,21};
int len=sizeof(array)/sizeof(int);
cout<<"The orginal array are:"<<endl;
for(int i=0; i<len; ++i)
{
cout<< array[i] << " ";
}
cout<<endl;
quick_sort(array,0,len-1);
cout<<"The sorted array are:"<<endl;
for(int i=0; i<len; ++i)
{
cout<< array[i] << " ";
}
cout<<endl;
return 0;
}
Test结果:
The orginal arrayare:
12 345 545 123 45 10 8 23 1 21
The sorted arrayare:
1 8 10 12 21 23 45 123 345 545
Summary:
- 快排是用分治的思想,取一个基准数,将数组化为左右两份, 左边的小,右边的大
- 依次对左右两份再次划分,取基准;最后得到结果