手写快速排序和归并排序
2017-12-26 20:54
429 查看
排序应该是基础,要经常写,熟练使用递归。方法贴在这里,以后时刻温习
#include<cstdio> void quicksort(int a[],int low,int high) { if(low>=high) return; int key = a[low]; int first = low; int last = high; while(first<last) { while(first<last&&a[last]>=key) --last; a[first] = a[last]; while(first<last&&a[first]<=key) ++first; a[last] = a[first]; printf("%d %d\n",first,last); } a[first] = key; quicksort(a,low,first-1); quicksort(a,first+1,high); } void Merge(int sourceArray[],int tempArray[],int s,int mid,int t) { int i = s ; int j = mid+1; int k = s; while(i<=mid&&j<=t) { if(sourceArray[i]<=sourceArray[j]) tempArray[k++] = sourceArray[i++]; else tempArray[k++] = sourceArray[j++]; } while(i<=mid) tempArray[k++] = sourceArray[i++]; while(j<=t) tempArray[k++] = sourceArray[j++]; for(i=s;i<=t;i++) sourceArray[i] = tempArray[i]; } void MergeSort(int sourceArray[],int tempArray[],int s,int t) { if(s<t) { int mid = (s+t)>>1; MergeSort(sourceArray,tempArray,s,mid); MergeSort(sourceArray,tempArray,mid+1,t); Merge(sourceArray,tempArray,s,mid,t); } } int main() { int a[] = {10,2,3,4,9,8,6,14,12,32132,121342,424231,311,32132,3232}; // quicksort(a,0,7); int b[100]; MergeSort(a,b,0,14); for(int i=0;i<15;i++) printf("%d ",a[i]); return 0; }
相关文章推荐
- 快速排序和归并排序
- 手写的qsort快速排序
- 手写快速排序
- Javascript排序算法(冒泡排序,选择排序,插入排序,归并排序,快速排序)
- 归并排序和快速排序比较
- 排序算法总结(归并排序、快速排序)(python实现)
- 归并排序和快速排序的衍生问题(逆序对)
- 归并排序与快速排序
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
- 需要手写的算法之---------------归并排序
- 常用的排序算法性能分析(2)—— 归并排序、快速排序
- 理解快速排序和归并排序
- 快速排序,堆排序和归并排序谁更快?
- 初级版、正宗版、升级版冒泡排序;简单选择排序;直接插入排序;希尔排序;堆排序;递归法 、非递归法归并排序;快速排序; 快速排序优化算法
- 快速排序和归并排序比较
- 实用算法的分析与程序设计——分治算法(归并排序,快速排序)
- 排序----插入排序,二路归并排序,堆排序,快速排序
- c语言归并排序和快速排序
- 内部排序之四:归并排序和快速排序