Quick Sort & Binary Merge Sort

常用排序算法实现。

//快速排序实现,采用左开右闭区间 [start, end)
void quick_sort(vector<int> & arr, int start, int end){
    if(end - start <= 1){
        return;
    }
    int pivot = arr[start];
    int i = start;
    int j = end - 1;
    while(i < j){
        while(i < j && arr[j] > pivot)
            j--;

        while(i < j && arr[i] <= pivot)
            i++;

        if(i < j){
            int temp = arr[j];
            arr[j] = arr[i];
            arr[i] = temp;
        }
    }
    arr[start] = arr[i];
    arr[i] = pivot;
    quick_sort(arr, start, i);
    quick_sort(arr, i+1, end);
}

//二路归并排序实现,采用左开右闭区间 [start, end)
void binary_merge_sort(vector<int> & arr, int start, int end){
    if(end - start == 1)
        return;
    int mid = start + (end - start)/2;
    binary_merge_sort(arr, start, mid);
    binary_merge_sort(arr, mid, end);
    vector<int>::iterator itStart = arr.begin() + start;
    vector<int>::iterator itEnd = arr.begin() + end;
    vector<int> ivBuf(itStart, itEnd);
    int i = 0;
    int j = mid - start;
    int k = start;
    while(i < mid-start && j < end-start){
        if(ivBuf[i] < ivBuf[j]){
            arr[k] = ivBuf[i];
            i++;
        }else{
            arr[k] = ivBuf[j];
            j++;
        }
        k++;
    }
    while(i < mid-start){
        arr[k] = ivBuf[i];
        i++;
        k++;
    }
    while(j < end-start){
        arr[k] = ivBuf[j];
        j++;
        k++;
    }
}

测试验证代码。

void print_vector(vector<int> arr){
    for(size_t i = 0; i < arr.size(); i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

void pause(){
    char ch;
    cin>>ch;
}

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> arr;

    //1. Quick Sort Test
    cout<<"Quick Sort Test:"<<endl;

    arr.clear();
    arr.push_back(5);
    arr.push_back(3);
    arr.push_back(8);
    arr.push_back(6);
    arr.push_back(4);
    print_vector(arr);

    quick_sort(arr, 0, arr.size());

    print_vector(arr);

    cout<<endl;

    //2. Binary Merge Sort Test
    cout<<"Quick Sort Test:"<<endl;
    arr.clear();
    arr.push_back(5);
    arr.push_back(3);
    arr.push_back(8);
    arr.push_back(6);
    arr.push_back(4);
    print_vector(arr);

    binary_merge_sort(arr, 0, arr.size());

    print_vector(arr);

    pause();

    return 0;
}

如有Bug,欢迎留言交流!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值