Arrays 随机数组合并排序方法的添加
我编写了一些生成随机数组的代码,并对其进行快速排序。但是,我需要对合并排序算法执行相同的操作,但我不确定如何执行。我还确保有一个菜单,这样就可以将数组隔离一次。有谁能发表一些关于如何添加合并排序方法的想法吗Arrays 随机数组合并排序方法的添加,arrays,algorithm,quicksort,mergesort,Arrays,Algorithm,Quicksort,Mergesort,我编写了一些生成随机数组的代码,并对其进行快速排序。但是,我需要对合并排序算法执行相同的操作,但我不确定如何执行。我还确保有一个菜单,这样就可以将数组隔离一次。有谁能发表一些关于如何添加合并排序方法的想法吗 import java.util.Scanner; import java.util.Random; public class Algo { public static void main(String[] args) { Random gen = new Random
import java.util.Scanner;
import java.util.Random;
public class Algo {
public static void main(String[] args) {
Random gen = new Random();
Scanner scanner = new Scanner(System.in);
int[] a = new int[20];
for (int i = 0; i < a.length; i++)
a[i] = gen.nextInt(100);
System.out.println("1. Quick Sort");
System.out.println("2. Merge Sort");
System.out.println("what number do you want?");
int choice = scanner.nextInt();
if (choice == 1) {
System.out.println("Quick sort:");
printArray(a);
quickSort(a, 0, a.length - 1);
printArray(a);
}
else
{
System.out.println("Merge sort:");
printArray(a);
//MERGE SORT NEEDED
printArray(a);
}
}
private static void printArray(int[] a){
for (int i : a)
System.out.print(i + " ");
System.out.println("");
}
private static void quickSort(int a[], int left, int right)
{
int i = left, j = right;
int tmp;
int pivot = a[(left + right) / 2];
while (i <= j) {
while (a[i] < pivot)
i++;
while (a[j] > pivot)
j--;
if (i <= j) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++;
j--;
}
}
if (left < j)
quickSort(a, left, j);
if (i < right)
quickSort(a, i, right);
}
private static void printArrays(int[] a, int tmp){
System.out.println();
for (int x = 0; x < a.length; x++){
System.out.print(tmp);
}
}
}
import java.util.Scanner;
导入java.util.Random;
公共类算法{
公共静态void main(字符串[]args){
Random gen=新的Random();
扫描仪=新的扫描仪(System.in);
int[]a=新的int[20];
for(int i=0;i 如果(i这是我的mergesort java实现。您可以根据需要修改它:
public class MergeSort
{
public int[] arr;
public MergeSort( int[] a )
{
arr = a;
}
private void mergeSort( int a, int b )
{
if( a==b )
return;
int mid = ( a+b )/2;
mergeSort( a, mid );
mergeSort( mid+1, b );
merge( a, mid, mid+1, b );
}
public void sort()
{
mergeSort( 0, arr.length-1 );
}
private void merge( int a, int m1, int m2, int b )
{
int[] sorted = new int[ b-a+1 ];
int i=0, j=0;
while( ( i<(m1-a+1)) &&( j<( b-m2+1 )) )
{
if( arr[ a+i ] < arr[ a+j ])
{
sorted[ i+j ] = arr[ a+i ];
i++;
}
else
{
sorted[ i+j ] = arr[ a+j ];
j++;
}
}
// copy rest of the remaining array
while( i< (m1-a+1 ))
{
sorted[ i+j ] = arr[ a+i ];
i++;
}
while( j<( b-m2+1 ))
{
sorted[ i+j ] = arr[ a+j ];
j++;
}
System.arraycopy(sorted, 0, arr, a, b - a + 1);
}
}
公共类合并排序
{
公共int[]arr;
公共合并排序(int[]a)
{
arr=a;
}
私有无效合并排序(整数a、整数b)
{
如果(a==b)
返回;
int mid=(a+b)/2;
合并排序(a,mid);
合并排序(mid+1,b);
合并(a、mid、mid+1、b);
}
公共无效排序()
{
合并排序(0,arr.length-1);
}
私有无效合并(整数a、整数m1、整数m2、整数b)
{
int[]排序=新int[b-a+1];
int i=0,j=0;
while((i)到目前为止您尝试了什么?您可以在这里找到算法的伪代码:Off-topic,如果您想摆脱“printaries”方法,您也可以使用Arrays.toString(array)