【问题标题】:Addition of merge sort method for a random array添加随机数组的归并排序方法
【发布时间】:2012-03-19 01:50:47
【问题描述】:

我编写了一些代码来生成随机数组并对其进行快速排序。但是,我需要对合并排序算法做同样的事情,但我不确定如何。我还确保有一个菜单,以便可以将数组隔离为一种。任何人都可以发布一些关于如何添加合并排序方法的想法吗?

  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);
}
}
}

【问题讨论】:

  • 到目前为止你做了什么?你可以在这里找到算法的伪代码:en.wikipedia.org/wiki/Merge_sort
  • 题外话,如果你想摆脱你的“printArrays”方法,你也可以直接使用Arrays.toString(array)

标签: arrays algorithm quicksort mergesort


【解决方案1】:

这是我的合并排序的 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);
}


}

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2015-04-22
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多