Quick Sort & Binary Merge Sort

来源:互联网 发布:最贵域名排行 编辑:程序博客网 时间:2024/05/29 03:41

常用排序算法实现。

//快速排序实现,采用左开右闭区间 [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,欢迎留言交流!!!

0 0
原创粉丝点击