类似于C语言中的归并排序,Java里面的归并也有属于自己的方法
下面可以看下如何通过书写和调用方法进行归并排序的实现
本人JAVA初学者一枚,还请各位大佬多多关照
下图是源码
package sort; public class Merge { //提供计算所需要的数组 private static Comparable[] assist; //比较w元素是否大于v元素 public static boolean less(Comparable w,Comparable v){ return w.compareTo(v)<0; } //元素交换位置 //对数组a中的元素实现排序 public static void sort(Comparable[] a){ //对assist数组进行重置 assist=new Comparable[a.length]; //定义一个lo变量和hi变量分别记录最小索引和最大索引 int lo=0; int hi=a.length-1; //利用sort重载方法完成数组a中从索引lo到索引hi中的排序 sort(a,lo,hi); } //对数组a中从lo到hi索引的元素进行排序 private static void sort(Comparable[] a,int lo,int hi){ if(hi<=lo){ return; } int mid=lo+(hi-lo)/2; //分别对每一组进行排序 sort(a,lo,mid); sort(a,mid+1,hi); //把两组进行归并 merge(a,lo,mid,hi); } //对数组中。从lo到min元素为一组,从min+1到hi为一组进行归并 private static void merge(Comparable[] a,int lo,int mid,int hi){ //定义三个指针 int i=lo; int p1=lo; int p2=mid+1; //遍历,移动p1和p2索引处的值,找出小的那个,放到辅助数组对应的指针处 while (p1<=mid&&p2<=hi) { if(less(a[p1],a[p2])){ assist[i++]=a[p1++]; } else{ assist[i++]=a[p2++]; } } //遍历,如果p1指针没有走完,那么顺序移动p1指针,把元素移动到对应辅助数组的索引处 while (p1<=mid){ assist[i++]=a[p1++]; } //遍历,如果p2指针没有走完,那么顺序移动p2指针,把元素移动到对应辅助数组的索引处 while (p2<=hi){ assist[i++]=a[p2++]; } //把辅助数组中的元素拷贝到a数组中 for (int index=lo;index<=hi;index++){ a[index]=assist[index]; } } }
可以创建一个测试类进行测试调用
package sort; import java.util.Arrays; public class MergeTest { public static void main(String[] args) { Integer[] a={1,3,45,61,651,162,161,56156,156,564,456165,18,81,89156,}; Merge.sort(a); System.out.println(Arrays.toString(a)); } }
学艺不精,请各位大佬点评