MergeSort(递归)
2016-06-14 20:10
316 查看
考试前写的最终版本~
合并排序的递归实现算法。
输入:先输入进行合并排序元素的个数,然后依次随机输入(或随机生成)每个数字。
输出:元素排序后的结果,数字之间不加任何标识符。
示例:输入:8 11 1 2 4 8 6 15 8,输出:1 2 4 6 8 8 11
合并排序的递归实现算法。
输入:先输入进行合并排序元素的个数,然后依次随机输入(或随机生成)每个数字。
输出:元素排序后的结果,数字之间不加任何标识符。
示例:输入:8 11 1 2 4 8 6 15 8,输出:1 2 4 6 8 8 11
package Test2; import java.util.Scanner; /* * 递归~~归并排序 */ public class MergeSort { static void mergesort(int arr[],int left,int right){ if(left<right){ //数组中至少有两个元素 int mid=(right+left)/2; mergesort(arr,left,mid); //这里是把数组分成两段,注意这里mid所在包含在第一段(跟二分查找的不同) mergesort(arr,mid+1,right); merge(arr,left,mid,right); //合并到数组arr2,并把数组arr2中元素复制到arr } } private static void merge(int arr[],int left,int mid,int right) { //合并 arr[left:m]和arr[mid+1:right] 到 arr2[l:r] int i=left; // i是第一段序列的下标 int j=mid+1; // j是第二段序列的下标 int k=left; //k=left临时存放合并序列的下标 int arr2[]=new int[arr.length]; //创建一个和arr相等大小的数组 while ((i<=mid)&&(j<=right)) { // 判断第一段和第二段取出的数哪个更小,将其存入合并序列,并继续向下扫描 if(arr[i]<=arr[j]) arr2[k++]=arr[i++]; else arr2[k++]=arr[j++]; } while(i<=mid) arr2[k++]=arr[i++]; //若第一段序列还没扫描完,将其全部复制到合并序列 while(j<=right) arr2[k++]=arr[j++]; // 若第二段序列还没扫描完,将其全部复制到合并序列 for(int s=left;s<=right;s++) // 将合并序列复制到原始序列中 arr[s]=arr2[s]; } public static void main(String[] args) { Scanner s = new Scanner(System.in); int n =s.nextInt(); int arr[]=new int ; for (int i = 0; i < arr.length; i++) { arr[i]=s.nextInt(); } mergesort(arr,0,arr.length-1); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); } } }
相关文章推荐
- HTML5 服务器发送事件(server-sent events)
- HBase -ROOT-和.META.表结构
- PHP连接数据_insert_id介绍
- 遗留问题,事务,备份,还原,分离和附加
- linux 用户 组 权限设置
- 怎样花两年时间去面试一个人
- 原生js全选,反选,不选
- Ubuntu Kylin 16.04 常用设置
- Node 4000 .js、Sublime text3、HTML5模板搭建基本简单静态web网站
- JQuery 封装的应用 还是注册
- HDUOJ_1754_I Hate It_线段树
- 【HTML5】audio音频
- 自定义 Android 过场动画
- 专题四 Problem A
- kaldi跑timit的注意事项
- android中system.img的打包过程
- 2、Android构建本地单元测试
- 2、Android构建本地单元测试
- python 学习2
- ctags 的最简单使用