【排序算法】——归并排序
来源:互联网 发布:平面示意图制作软件 编辑:程序博客网 时间: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
- 排序算法—归并排序
- 排序算法—归并排序
- 排序算法总结——归并排序
- 经典排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 算法——排序之归并排序
- 排序算法——归并排序
- 排序算法系列——归并排序
- 【排序算法】——归并排序
- 排序算法——归并排序
- 经典排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 常用排序算法——归并排序
- 排序算法——归并排序
- 排序算法——归并排序
- 黑马程序员—java技术blog—第十四篇线程基础概述
- 字符串空格替换
- object-c中对象创建
- 最长上升子序列 (二分)
- 05-树7 堆中的路径
- 【排序算法】——归并排序
- 黑马程序员---Java基础---递归及IO流
- 05-树8 File Transfer
- 05-树9 Huffman Codes
- 分布式内存文件系统Tachyon
- Scala深入浅出进阶经典 第75讲:模式匹配下的For循环
- 06-图1 列出连通集
- LeetCode之Unique Paths
- Android自定义View的实现方法,带你一步步深入了解View(四)