基于数组存储方式的自然合并排序算法
package jdh;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] a=new int[]{7,5,6,8,9,2,0,1,4,3};
int[] b=new int[a.length]; //定义b数组用来存储a数组分类时的位置
int[] temp=new int[a.length];
int i,k;
k=classify(a,b); //k代表b数组的最后一位b[k]
for(i=0;i<k;i++) {
int low=0;
int middle=b[i];
int high=b[i+1];
mergeSort(a,temp,low,middle,high); //通过循环来对a数组进行归并排序
}
System.out.println(Arrays.toString(a)); //输出a数组
}
public static int classify(int a[],int b[]) {
int i,j,k=0;
for(i=0;i<a.length-1;i++) {
j=i+1;
if(a[i]>a[j]) {
b[k]=i; //获取a数组每一次分类时的位置
k++;
}
}
b[k]=a.length-1;
return k; //返回k
}
public static void mergeSort(int a[], int temp[], int left, int middle,int right) {
int i = left;
int j = middle + 1;
int k = 0;
while (i <= middle && j <= right) {
if (a[i] < a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
} //循环将两个小组里的数排好序赋值到temp数组
while (i <= middle) {
temp[k++] = a[i++]; //将未进行比较过的数组放入temp数组
}
while (j <= right) {
temp[k++] = a[j++]; //将未进行比较过的数组放入temp数组
}
for (int i1 = 0; i1 < k; i1++) {
a[i1 + left] = temp[i1]; //将temp数组里的数放入a数组
}
}
}
我自己当然是什么都不会,在这里参考了这位兄嘚的博客
https://www.cnblogs.com/wangxiaopei/p/8551277.html