Quick Sort & Binary Merge Sort
2016-05-01 20:44
316 查看
常用排序算法实现。
测试验证代码。
如有Bug,欢迎留言交流!!!
//快速排序实现,采用左开右闭区间 [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,欢迎留言交流!!!
相关文章推荐
- js构建ui的统一异常处理方案(四)
- hdu 5412 CRB and Queries(动态求区间第k小+整体二分)
- CoreThink主题开发(二)使用H-ui开发博客主题之把H-ui放入你的主题目录中
- HDU1242-Rescue
- Django build_in 登录注册模块 注销时页面是admin模块自带的注销页面的原因
- SPOJ GSS1 Can you answer these queries I
- JAVA GUI的介绍
- the-type-java-lang-charsequence-cannot-be-resolved-in-package-declaration
- VUE 入门笔记
- UITableViewCell图片视差效果
- hdu1297Children’s Queue (递推+大数)
- android更新UI的几种方法
- LeetCode|Range Sum Query - Immutable
- 关于StringBuffer和StringBuilder的一点看法
- Codeforces 667C Reberland Linguistics【DFS】
- Codeforces 667C Reberland Linguistics【DFS】
- Codeforces 667C Reberland Linguistics【DFS】
- ERROR! The server quit without updating PID file (/var/lib/mysql/service.pid).
- leetcode 063 Unique Paths II
- leetcode 062 Unique Paths