归并排序-剑指offer
2016-07-04 10:13
155 查看
算法:
分治法,先不断的二分,直到有序,第一次有序就是数组里只有一个数字。
然后递归合并数组,需要有辅助空间暂存合并后的数组,再更新原数组。
分:
合:
分治法,先不断的二分,直到有序,第一次有序就是数组里只有一个数字。
然后递归合并数组,需要有辅助空间暂存合并后的数组,再更新原数组。
分:
void MergeSort(int a[],int first,int last,int temp[]){ if(first<last){ int mid = (first + last)/2; MergeSort(a,first,mid,temp); MergeSort(a,mid+1,last,temp); MergeArray(a,first,mid,last,temp); } }
合:
void MergeArray(int a[],int first,int mid,int last,int temp[]){ //第一个数组 int i = first;int m = mid; //第二个数组 int j = mid+1;int n = last; //结果数组 int k = 0; while(i<=m &&j<=n){ if(a[i]<a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while(i<=m) temp[k++] = a[i++]; while(j<= n) temp[k++] = a[j++]; //更新排序后的原数组 for (int i = 0; i < k; i++) { a[i+first] = temp[i]; } }
相关文章推荐
- 举例讲解C语言对归并排序算法的基础使用
- java实现归并排序算法
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- C++实现自底向上的归并排序算法
- C++实现自顶向下的归并排序算法
- Javascript中的迭代、归并方法详解
- JavaScript希尔排序、快速排序、归并排序算法
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- Java排序算法总结之归并排序
- C#递归算法之归并排序
- C++归并排序算法实例
- Javascript排序算法之合并排序(归并排序)的2个例子
- 归并排序的递归实现与非递归实现代码
- Java编程中实现归并排序算法的实例教程
- java二路归并排序示例分享
- java实现归并排序算法
- 归并排序的实现代码与思路
- js算法:Merge Sort 归并排序
- JavaScript希尔排序、快速排序、归并排序算法
- leetcode 虐我篇之(二) Two Sum