快速排序

#include <iostream>
using namespace std;
void print(int data[],int len);
void quick_sort(int data[],int low,int high)
{
    int p,q,iTemp;

    if(low >= high)
        return;
    p = low;
    q = high;
    iTemp = data[low];//设定第一个数据为中间判断值
    while(p < q){
        while(p < q && data[q] > iTemp){
            q--;
        }
        if(p < q)
            data[p++] = data[q];//将p后移一个位置,此位置已排好
        while(p < q && data[p] < iTemp){
            p++;
        }
        if(p < q)
            data[q--] = data[p];//将q前移一个位置,此位置已排好
    }
    data[p] = iTemp;//中间值,已经排好序
    #ifdef _DEBUG //调试用
        print(data,10);
        cout << "low:" << low << ",high:" << high << ",p:" << p << endl;
    #endif
    quick_sort(data,low,p-1);//p位置已经排好序,不需要再进入下一轮排序
    quick_sort(data,p+1,high);//p位置已经排好序,不需要再进入下一轮排序
}

void print(int data[],int len)
{
    for(int i = 0;i < len;i++){
        cout << data[i] << " ";
    }
    cout << endl;
}

int main()
{
    int data[] = {4,2,3,7,6,1,5,9,10,8};
    print(data,10);
    cout << "###################" << endl;
    quick_sort(data,0,sizeof(data)/sizeof(int)-1);
    cout << "###################" << endl;
    print(data,sizeof(data)/sizeof(int));
    cout << "###################" << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值