快速排序

快速排序的基本思想:
通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可对这俩部分记录继续进行排序,已达到整个序列有序的目的。
代码:

void Quick_Sort(vector<int> &v, int first,int end){
    if(first<end)
    {
        int key = v[first];
        int i = first;
        int j = end;
        while(i<j)
        {
            while(i<j&&v[j]>=key)
                j--;
            if(i<j)
                v[i]=v[j];
            while(i<j&&v[i]<key)
                i++;
                if(i<j)
                    v[j]=v[i];
        }
        v[i] = key;
        Quick_Sort(v,first,i-1);
        Quick_Sort(v,i+1,end);
    }
}

代码2

int Partition(int data[],int length,int start,int end){
    int pivot = data[end];
    int curpos = start;
    for(int index =start;index<end;index++)
    {
        if(data[index]<pivot)
        {
            swap(data[index],data[curpos]);
            curpos++;
        }
    }
    swap(data[curpos],data[end]);
    return curpos;
}
void Quick_Sort(int data[],int length,int start,int end)
{
    if(start>=end)
    return ;
    int index = Partiton(data,length,start,end);
    if(start<index)
    Quick_Sort(data,length,start,index-1);
    if(index<end)
    Quick_Sort(data,length,index+1,end);
}

代码3 改进版

void Quick_Sort2(int data[], int length, int start, int end)  
{  
    if (start >= end)  
        return;  
    int key = data[start];  
    int i = start, j = end+1;  
    while (1)  
    {  
        do{  
            i++;  
        } while (i <= end && data[i] < key);  
        do{  
            j--;  
        } while (data[j] > key);  
        if (i > j)  
            break;  
        swap(data[i],data[j]);  
    }  
    swap(data[start], data[end]);  
    Quick_Sort2(data, length, start, j - 1);  
    Quick_Sort2(data, length, j + 1, end);  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值