【排序算法】——归并排序

来源:互联网 发布:平面示意图制作软件 编辑:程序博客网 时间:2024/04/29 23:21

场景:代码实现堆排序,选择使用Java代码

思路:把待排数组平均分成两组,递归分组,直到每一组剩下一个元素后,两两数组进行有序合并。

代码实现
package Sort;/** * @author yummy */public class MergeSort { /** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubMergeSort test = new MergeSort();int []a = {1,7,2,8,3,6,5,4,7,0,12,4};System.out.print("排序前:");for(int i = 0; i < a.length; i++)System.out.print(a[i]+" ");System.out.println(" ");mergeSort(a,0,a.length-1);System.out.print("排序后:");for(int i = 0; i < a.length; i++)System.out.print(a[i]+" ");System.out.println(" ");}/** *  * @param array 待排数组 * @param start * @param end */public static void mergeSort(int[] array,int start,int end){if(start >= end)return;int mid = (start+end)/2;mergeSort(array,start,mid);mergeSort(array,mid+1,end);merge(array,start,mid,end);}/** * 合并操作 * @param array * @param left * @param center * @param right */public static void merge(int[] array,int start,int center,int end){//临时数组int[] temp = new int[end-start+1];//第二个数组头元素引索int secondArr = center+1;//临时数组头元素引索int tempArr = 0;//记录下start位置int flag = start;while(start <= center && secondArr <= end){if(array[start] <= array[secondArr])temp[tempArr++] = array[start++];elsetemp[tempArr++] = array[secondArr++];}while(start <= center){temp[tempArr++] = array[start++];}while(secondArr <= end){temp[tempArr++] = array[secondArr++];}tempArr = 0;while(flag <= end){array[flag++] = temp[tempArr++];}temp = null;}}


1 0
原创粉丝点击