归并排序
来源:互联网 发布:算法竞赛宝典 百科 编辑:程序博客网 时间:2024/06/15 14:01
归并排序基本思想:假设初始序列含有n个记录,则可以看成n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为1或2的有序序列,再两两归并,直到得到一个长度为n的有序序列为止,这种排序算法称为二路归并排序算法.
完整代码:
package cn.ccnu.sort;public class Merge {public static void mergeSort(int[] data, int start, int end){int middle = 0;if(start < end){middle = (start+end)/2;mergeSort(data, start, middle);mergeSort(data, middle+1, end);combine(data, start, middle, end);}}public static void combine(int[] data, int start, int middle, int end){int length = end-start+1; // 长度int[] temp = new int[length]; // 构建一个临时数组int i = start; // 指向前半部分的指针int j = middle+1; // 指向后半部分的指针int t = 0; // 指向临时数组的指针while(i<=middle && j<=end){if(data[i] < data[j]){ temp[t++] = data[i++];}else{temp[t++] = data[j++];}}// 可能会出现某个部分没比较完while(i<=middle){temp[t++] = data[i++];}while(j<=end){temp[t++] = data[j++];}// 把临时数组中的数赋值到data数组中去t = start; // 将t重新置为0for(int m=0; m<temp.length; m++, t++){data[t] = temp[m];}}public static void main(String[] args) {int[] data = {10, 3, 12, 5, 4, 9, 4, 7, 6};mergeSort(data, 0, data.length-1);for (int i : data) {System.out.print(i + " ");}}}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- Find a multiple (POJ
- Median of Two Sorted Arrays
- 杭电5305 Friends 搜索
- c++之A a和A *a=new A()
- LeetCode (Insert Interval)
- 归并排序
- 常用的创建线程池的方法
- jQuery语法,是一种很接近于java的语法,即 对象.function()
- 使用fastdfs_client的storage.upload_file方法上传图片抛FileNotFound异常
- poj 1061 扩展欧几里德
- 推荐系统概述3
- C语言实现链表的插入、删除、查询操作
- 成为用户体验设计师,这些知识你了解吗?
- 补做-第五次实验-项目四