算法-归并排序

来源:互联网 发布:宜嘉情感分析 知乎 编辑:程序博客网 时间: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];}}}


原创粉丝点击