现在的位置: 首页 > 综合 > 正文

快速排序算法

2018年03月16日 ⁄ 综合 ⁄ 共 842字 ⁄ 字号 评论关闭

快速排序是冒泡排序的一种改进形式,通过将待排序数据分解成大小两组,然后递归分解下去,直到分解为一个元素为止来完成排序。
快速排序的关键就是分组,即如何把数组分为大于中心轴点和小于中心轴点的两部分;
分组实现步骤如下:假设数组a[left,right]
1、选择中心轴点,这里选取数组的最后一个元素a[right]为中心轴点;
2、遍历数组,范围为[left,right-1],变量i,j;初始值i=left,j=left;
3、如果a[j]>a[right],就将a[j]与a[i++]交换
4、最后将a[i]与a[right]交换,就实现分组;

算法具体代码如下:

void inline swap(int &a,int &b)
{
    if(a==b)
    {
        return ;
    }
    a=a^b ;
    b=a^b ;
    a=a^b ;
}
#define LEN 23
int Partition(int a[],int left,int right)
{
    int pivot=right ;
    int i=left ;
    int j=left ;
    for(j=left;j<right;j++)
    {
        if(a[j]<a[pivot])
        {
            swap(a[j],a[i++]) ;//理解这一步是关键,为什么是a[j]和a[i++]交换呢?
        }
    }
    swap(a[i],a[pivot]) ;

    for(int m=0;m<LEN;m++)
    {//打印输出,便于调试
        cout<<a[m]<<"," ;
    }
    cout<<endl;
    return i ;
}
void QuikSort(int n[],int left,int right)
{
    int tmp ;
    if(left<right)
    {
        tmp=Partition3(n,left,right) ;
        QuikSort(n,left,tmp-1) ;
        QuikSort(n,tmp+1,right) ;
    }
}
int main()
{
    int n[]={ 12, 2, 12, 2, 9, 11, 34, 54,5,4,3,2,1,10,9,8,7,6,5,4,3,2,1 };
    QuikSort(n,0,22) ;
    return 0 ;
}

抱歉!评论已关闭.