算法-归并排序
来源:互联网 发布:宜嘉情感分析 知乎 编辑:程序博客网 时间:2024/06/06 08:53
归并排序的核心思想是分治策略,把原问题分解为规模更小的子问题求解,然后再把求解后的子问题的解合并为原问题的解。
废话不多说,直接看代码:
package com.zjq.arithmetic.sort;public class Merge_Sort {public static void main(String[] args) {int[] input={4,3,2,1,6,7,9,8,56,34,12};Merge_Sort m=new Merge_Sort();int[] result=m.merge_sort(input, 0, input.length-1);for(int i=0;i<input.length;i++){System.out.println(result[i]);}}/** * 排序方法 * @param input 输入数组 * @param start 数组开始下标 * @param end 数组结束下标 * @return */private int[] merge_sort(int[] input,int start,int end){if(start<end){int mid=(start+end)/2;merge_sort(input,start,mid);merge_sort(input,mid+1,end);merge(input,start,mid,end);}return input;}/** * 把下标为start至mid 和 mid+1至end的两个排序好的数组部分,合并到原数组中。 * @param input 输入数组 * @param start 开始下标 * @param mid 结束下标 * @param end */private void merge(int[] input,int start,int mid,int end){int k=start;int l=mid+1;int[] tempA=new int[end-start+1];int m=0;//依次比较两个数组部分的首元素while(k<=mid&&l<=end){if(input[k]<input[l]){tempA[m]=input[k];k++;}else{tempA[m]=input[l];l++;}m++;}//剩余部分加入到末尾while(k<=mid){tempA[m]=input[k];m++;k++;}//剩余部分加入到末尾while(l<=end){tempA[m]=input[l];m++;l++;}for(int i=start,j=0;i<=end;i++,j++){input[i]=tempA[j];}}}
阅读全文
1 0
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 【JVM】JVM进阶之JVM算法及种类
- ios 懒加载注意问题
- gitlab 用分支做版本发布
- checkSelfPermission总是返回PERMISSION_GRANTED
- 51Nod-1222-最小公倍数计数
- 算法-归并排序
- Angular 1.63 双向数据绑定 通过 $http 发送数据
- 浅拷贝与深度拷贝
- 九、 通用工具 ----clock和Timer
- 从头开始自己搭建服务器,实现web+android互联(ios暂缓) 开篇
- Ti-am335x-uboot-2015.07移植LCD显示logo功能
- java身份证合法性校验
- Java的深拷贝与浅拷贝
- javascript实现堆栈和简单的应用