浅谈快速排序

·快速排序的思想

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;
}

猜你喜欢

转载自blog.csdn.net/e_one/article/details/70000309