浅谈快速排序

来源:互联网 发布:php soap添加header 编辑:程序博客网 时间:2024/04/20 11:31

·快速排序的思想

1.在数组中的低位到高位中取一个基准数(一般是直接取低位或者是高位,而不取低位和高位之间的位置),然后根据索引把数组里的元素依次与基准数来比较,比基准数小的扔一边,比基准数大的扔一边

2.在数组左边执行第1步操作。

3.在数组的右边执行第1步操作。

我们可以看到,上面的流程是递归的套路。

快速排序最坏的时间复杂度是:O(n2),平均时间复杂度是:O(n*log2n)

·快速排序的代码实现

#include <iostream>using namespace std;#define N 10void 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;}

0 0
原创粉丝点击