算法学习之java实现归并排序
来源:互联网 发布:java二次开发前景怎样 编辑:程序博客网 时间:2024/05/16 11:47
归并排序:
思想:将带排序的数组分为两个数组,依次递归,知道分成的数组长度为有序时,然后两两数组合并。
稳定性:稳定
代码实现:
package com.scy.arithmetic;import java.util.Arrays;/* * 归并排序:思想将待排序的分成两个数组,分别进行排序,然后合并的过程 */public class MergerSort {public static void main(String[] args) {int[] a=new int[20];for (int i = 0; i < 20; i++) {a[i]=(int)(Math.random()*(100-1+1)+1);}System.out.println(Arrays.toString(a));new MergerSort().sort(a, 0, a.length-1);System.out.println(Arrays.toString(a));}//归并排序public void sort(int[] a,int start,int end){if(start<end){int middle=(start+end)/2;//将数组分为左右两个数组分别进行排序sort(a,start,middle);sort(a,middle+1,end);//将排序好的两个数组进行合并mergerSort(a, start, middle, end);}}public void mergerSort(int[] a,int start1,int end1,int end2){//临时存储两个数组排序好的值int[] temp=new int[end2-start1+1];int s1=start1;int s2=end1+1;int e1=end1;int e2=end2;//用于表述数组是否已经读完boolean flag1=true;boolean flag2=true;for (int i = 0; i < temp.length; i++) {if(flag1&&flag2){//如果第一个数组的开始值大于第二个数组的开始值,则将第二个值赋给temp数组if(a[s1]>a[s2]){temp[i]=a[s2];if(s2==e2){flag2=false;}else{s2++;}}else{temp[i]=a[s1];if(s1==e1){flag1=false;}else{s1++;}}}//第一个数组已经用完,全部用第二个数组的else if(!flag1&&flag2){temp[i]=a[s2];if(s2==e2){flag2=false;}else{s2++;}}//如果第二个数组用完,第一个数组还有时,则开始读取第一个数组else if(flag1&&!flag2){temp[i]=a[s1];if(s1==e1){flag1=false;}else{s1++;}}//如果都读取完了,则表示已经 存储完成。}//将临时值依次赋值给数组afor (int i = 0; i < temp.length; i++) {a[start1+i]=temp[i];}}}
0 0
- 算法学习之java实现归并排序
- Java实现排序算法之归并排序
- 排序算法之归并排序java实现
- 算法(第四版)学习笔记之java实现归并排序
- 算法学习之路:分治策略-归并排序-java实现
- java实现排序算法之归并排序(2路归并)
- 归并排序算法之Java实现
- 【java实现】算法导论之归并排序
- Java算法实现之归并排序
- 算法 排序算法之归并排序 java实现
- 排序算法之快速排序、归并排序(java实现)
- Java实现-高效排序算法之归并排序
- [学习笔记]Java排序算法之归并排序
- 算法学习之归并排序
- java实现归并排序算法
- Java归并排序算法实现
- java实现归并排序算法
- java实现归并排序算法
- 我的大数据之路(一)
- 内联函数和宏定义的区别
- IOS--UI Cell 自适应高度
- poj 1979 dfs
- Cookie
- 算法学习之java实现归并排序
- java的(PO,VO,TO,BO,DAO,POJO)解释
- java 程序构成 及 开发工具 简介
- linux 命令之 dmidecode
- 黑马程序员-------java基础-IO(1)
- husterxsp.github.io
- Add Binary
- [Leetcode 116, Medium] Populating Next Right Pointers in Each Node
- 如何让你的APK跑在 com.android.phone 进程