归并排序的JAVA实现和性能分析
来源:互联网 发布:js怎么给div加id 编辑:程序博客网 时间:2024/06/05 23:03
package Sort;//稳定public class mergesort { public static void main(String[] args) { int[] a={49,38,65,97,76,13,27,49,78,34,12,64,1,8}; System.out.println("排序之前:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } //归并排序 mergeSort(a); System.out.println(); System.out.println("排序之后:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } } //归并排序前的一些准备 public static void mergeSort(int[] arr){ int[] tmp =new int[arr.length]; //tmp为辅助数组 internalMergeSort(arr, tmp, 0, arr.length-1); } private static void internalMergeSort(int[] a, int[] tmp, int left, int right){ //当left==right的时,已经不需要再划分了 if (left<right){ int middle = (left+right)/2; internalMergeSort(a, tmp, left, middle); //左子数组 internalMergeSort(a, tmp, middle+1, right); //右子数组 mergeSortedArray(a, tmp, left, middle, right); //具体合并两个子数组,最近的递归返回点开始执行 } } // 合并两个有序子序列 arr[left, ..., middle] 和 arr[middle+1, ..., right]。tmp是辅助数组。 private static void mergeSortedArray(int arr[], int tmp[], int left, int middle, int right){ int i=left; int j=middle+1; int k=0; //k计数合并后数组大小 //原数据数组只有一个arr;left right middle 来分割,确定左右子数组 //下面操作即合并俩各自有序数组 while ( i<=middle && j<=right){ if (arr[i] <=arr[j]){ tmp[k++] = arr[i++]; } else{ tmp[k++] = arr[j++]; } } while (i <=middle){//剩余部分存入tmp tmp[k++] = arr[i++]; } while ( j<=right){//剩余部分存入tmp tmp[k++] = arr[j++]; } //把数据复制回原数组 for (i=0; i<k; ++i){ arr[left+i] = tmp[i]; } }}
0 0
- 归并排序的JAVA实现和性能分析
- 归并排序的Java实现、性能分析以及适用场景
- 快速排序的JAVA实现和性能分析
- 堆排序的JAVA实现和性能分析
- 归并排序(附Java实现和分析)
- 选择,插入,希尔,快速,堆,归并排序六种排序方式的Java 实现和性能对比(付代码)
- 排序算法的C++实现与性能分析(插入排序、归并排序、快速排序、STOOGE排序、堆排序)
- java实现的归并排序
- 归并排序的java实现
- 归并排序的Java实现
- 归并排序的java实现
- 归并排序的java实现
- 归并排序的java实现
- 归并排序的java实现
- Java实现的归并排序
- Java归并排序的实现
- 归并排序的Java实现
- LUA 排序算法和性能分析[6]:归并排序算法
- python入门笔记--第一个函数print
- Hibernate中的inverse和cascade属性
- 对话框大小与像素关系
- Linux系统编程——I/O多路复用select、poll、epoll的区别使用
- 如何让你的JavaScript代码更加语义化
- 归并排序的JAVA实现和性能分析
- 分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(一)
- 开发版本分类(beat、standard、professiona..)详解
- android开机自启动源码
- Android中attr自定义属性详解
- Configure,Makefile.am, Makefile.in, Makefile文件之间关系
- 判断链表是否有环为什么快慢指针一定会相遇
- Oracle左右全等连接(自然连接)
- 《剑指Offer》学习笔记--面试题53:正则表达式匹配