Java 合并排序不正确
我尝试使用下面的代码在Java中实现合并排序。Java 合并排序不正确,java,arrays,sorting,Java,Arrays,Sorting,我尝试使用下面的代码在Java中实现合并排序。mergeSort()方法被认为是一种递归方法,可以重复地将数组划分为较小的部分,而merge()方法将数组中已排序的两个部分合并为一个已排序的部分 代码如下: class MergeSort{ public static void mergeSort(int[] array){ mergeSort(array, 0, array.length-1); } public static void mergeSor
mergeSort()
方法被认为是一种递归方法,可以重复地将数组划分为较小的部分,而merge()
方法将数组中已排序的两个部分合并为一个已排序的部分
代码如下:
class MergeSort{
public static void mergeSort(int[] array){
mergeSort(array, 0, array.length-1);
}
public static void mergeSort(int[] array, int start, int end){
int mid = (start + end)/2;
if (end > start) {
mergeSort(array, start, mid);
mergeSort(array, mid + 1, end);
merge(array, start, end, mid + 1);
}
}
public static void merge(int[] array, int start, int end, int mid){
int length = end - start + 1,length1 = mid- start, length2 = end - mid + 1, index1 = start, index2 = mid, sortedindex = 0;
boolean cont = true;
int[] sortedArray = new int[length];
while (cont){
if (array[index1] > array[index2]){
sortedArray[sortedindex] = array[index2];
index2++;
} else{
sortedArray[sortedindex] = array[index1];
index1++;
}
sortedindex++;
//reached the end of one array, dump the rest of the remaining array in the sorted array
if (index1 >= length1){
for (index2 = index2; index2 < length2; index2++){
sortedArray[sortedindex] = array[index2];
sortedindex++;
}
cont = false;
} else if (index2 >= length2){
for (index1 =index1; index1 < length1; index1++){
sortedArray[sortedindex] = array[index1];
sortedindex++;
}
cont = false;
}
}
//copy the sorted array into the main array
for (int i = 0; i <= length - 1; i++){
array[start+i] = sortedArray[i];
}
}
}
public class Main {
public static void main(String[] args) {
// write your code here
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n");
Random random = new Random();
int length = scanner.nextInt();
int[] array = new int[length];
for (int i = 0; i < length;i++){
array[i] = random.nextInt(5000);
//System.out.println(array[i]);
}
MergeSort.mergeSort(array);
for (int i: array){
System.out.println(i);
}
}
}
类合并排序{
公共静态void合并排序(int[]数组){
合并排序(数组,0,数组。长度-1);
}
公共静态void mergeSort(int[]数组,int start,int end){
int mid=(开始+结束)/2;
如果(结束>开始){
合并排序(数组、开始、中间);
合并排序(数组,中间+1,结束);
合并(数组、开始、结束、中间+1);
}
}
公共静态无效合并(int[]数组、int开始、int结束、int中间){
int length=end-start+1,length1=mid-start,length2=end-mid+1,index1=start,index2=mid,sortedindex=0;
布尔控制=真;
int[]sortedArray=新int[长度];
while(续){
if(数组[index1]>数组[index2]){
sortedArray[sortedindex]=数组[index2];
index2++;
}否则{
sortedArray[sortedindex]=数组[index1];
index1++;
}
sortedindex++;
//到达一个数组的末尾时,将剩余数组的其余部分转储到已排序数组中
如果(index1>=长度1){
对于(index2=index2;index2=长度2){
对于(index1=index1;index1 对于(int i=0;iwhile循环应提前关闭
public static void merge1(int[] array, int start, int end, int mid) {
int length = end - start + 1;
int[] sortedArray = new int[length];
int index1 = start;
int index2 = mid + 1;
int sortedindex = 0;
while (index1 <= mid && index2 <= end) {
if (array[index1] < array[index2]) {
sortedArray[sortedindex++] = array[index1++];
} else {
sortedArray[sortedindex++] = array[index2++];
}
}
// reached the end of one array, dump the rest of the remaining array in the
// sorted array
while (index1 <= mid) {
sortedArray[sortedindex++] = array[index1++];
}
while (index2 <= end) {
sortedArray[sortedindex++] = array[index2++];
}
// copy the sorted array into the main array
for (int i = 0; i <= length - 1; i++) {
array[start + i] = sortedArray[i];
}
}
publicstaticvoidmerge1(int[]数组,int开始,int结束,int中间){
整数长度=结束-开始+1;
int[]sortedArray=新int[长度];
int index1=开始;
int index2=mid+1;
int-sortedindex=0;
虽然(index1)您不必说初学者,但每个人都是调试阶段的初学者,如果您使用eclipse,您可能会看到这一点