2016-07-17 6 views
0

私はMergesortにユーザが入力した短い文字列のプログラムを作成しました。代わりに、無作為に生成された数字を使用して、先頭の列を埋める必要があります。これはmath.randomを使って可能ですか?また、与えられた範囲で数値を生成するには? (すなわち、5-50または0-1)。助けをありがとう私は私のコードを以下に含めました。Mergesort数値の配列

public class MergeSort 
{ 
    public static void main(String[] args) 
    { 
     //for (int i = 0; i < 10000; ++i) 
     //{ 
     // String[i] = Math.random(); 
     //} 
     //Unsorted array 
     Integer[] a = { 2, 6, 3, 5, 1, 4, 10}; 

     //Call merge sort 
     mergeSort(a); 

     //Check the output which is sorted array 
     System.out.println(Arrays.toString(a)); 
    } 

    public static Comparable[] mergeSort(Comparable[] list) 
    { 
     //If list is empty; no need to do anything 
     if (list.length <= 1) { 
      return list; 
     } 

     //Split the array in half in two parts 
     Comparable[] first = new Comparable[list.length/2]; 
     Comparable[] second = new Comparable[list.length - first.length]; 
     System.arraycopy(list, 0, first, 0, first.length); 
     System.arraycopy(list, first.length, second, 0, second.length); 

     //Sort each half recursively 
     mergeSort(first); 
     mergeSort(second); 

     //Merge both halves together, overwriting to original array 
     merge(first, second, list); 
     return list; 
    } 


    private static void merge(Comparable[] first, Comparable[] second, Comparable[] result) 
    { 
     //Index Position in first array - starting with first element 
     int iFirst = 0; 

     //Index Position in second array - starting with first element 
     int iSecond = 0; 

     //Index Position in merged array - starting with first position 
     int iMerged = 0; 

     //Compare elements at iFirst and iSecond, 
     //and move smaller element at iMerged 
     while (iFirst < first.length && iSecond < second.length) 
     { 
      if (first[iFirst].compareTo(second[iSecond]) < 0) 
      { 
       result[iMerged] = first[iFirst]; 
       iFirst++; 
      } 
      else 
      { 
       result[iMerged] = second[iSecond]; 
       iSecond++; 
      } 
      iMerged++; 
     } 
     //copy remaining elements from both halves - each half will have already sorted elements 
     System.arraycopy(first, iFirst, result, iMerged, first.length - iFirst); 
     System.arraycopy(second, iSecond, result, iMerged, second.length - iSecond); 
    } 
} 
+0

を読む[尋ねる]と "くだらないおしゃべり" を投稿避けてください:一般化する

。単一の、一貫した、具体的な質問をしてください。 – Amit

+0

コーダーの入力値を使用する代わりに、ランダムに生成された番号のリストが必要です。 @Amit。 Imはmath.randomがこの場合に役立つと仮定しています。 –

+0

@Tomlangdorrそれははるかに良いです。質問するだけで質問を編集する必要があります。 (あなたの質問とは無関係なので、「マージソート」と関係のあるものはすべて削除してください。) – smarx

答えて

2

ランダムな整数でいっぱいの配列を作成する方法は次のとおりです。 (この場合、彼らはランダムな整数0以上かつ100未満だ)

int[] a = new int[10]; 

Random rand = new Random(); 

for (int i = 0; i < 10; i++) { 
    a[i] = rand.nextInt(100); 
} 

あなたは(排他的)5(両端を含む)と50の間の数字を生成したい場合は、あなたが使用することができrand.nextInt(45) + 5

rand.nextInt(max-min) + min 
+0

ありがとうございました。これを私のコードにどのように実装すればよいですか? –

+1

@Tomlangdorr私はそれに答える方法がわかりません。あなたのコードにそれをコピー/ペーストするでしょうか? – smarx

+0

どのように私はこれをダブル値のために実装し、この文字列を現在の文字列に置き換えますか? –