·快速排序的思想
1.在数组中的低位到高位中取一个基准数(一般是直接取低位或者是高位,而不取低位和高位之间的位置),然后根据索引把数组里的元素依次与基准数来比较,比基准数小的扔一边,比基准数大的扔一边
2.在数组左边执行第1步操作。
3.在数组的右边执行第1步操作。
我们可以看到,上面的流程是递归的套路。
快速排序最坏的时间复杂度是:O(n2),平均时间复杂度是:O(n*log2n)
·快速排序的代码实现
#include <iostream>
using namespace std;
#define N 10
void swap(int arr[N],int i,int j)
{
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
/**
* 在low到high的范围内,以high位置的数为基准,把比它小的数移到它左边,把比它大的数移到右边
*/
int aSort(int arr[N],int low,int high)
{
int base=arr[high];//以高位为基准
while(low<high)
{
while(low<high&&arr[low]<=base)//从左往右找比基准小的
{
low++;
}
swap(arr,low,high);
while(low<high&&arr[high]>=base)//从右往左找比基准大的
{
high--;
}
swap(arr,low,high);
}
//到这里low==high
return low;
}
void quickSort(int arr[N],int low,int high)
{
if(low<high){
int pos=aSort(arr,low,high);
quickSort(arr,low,pos-1);
quickSort(arr,pos+1,high);
}
}
int main()
{
int arr[N]={5,1,2,3,4,6,7,8,8,9};
quickSort(arr,0,N-1);
for(int i=0;i<N;i++)
{
cout<<arr[i]<<" ";
}
return 0;
}