2014-07-17 120 views
-1

對於我們的實驗室歸併算法,我們的教授希望我們用下面的代碼來測試合併/氣泡/插入/快速排序算法:測試通過生成隨機數

//fill an existing array with random doubles 
//the value n will be with number of values to create 
for (int i = 0; i < n; ++i) { 
    ArrayToBeSorted[i] = Math.random(); 
} 

//measuring the sorting time 
long time1 = System.nanoTime(); 
// here is the place where you place the code 
// or the call to code to be timed. 
long elapsed = System.nanoTime() - time1; 

這裏有一個alogrithm我發現在互聯網上與合併排序。我很困惑如何使用我們的教授提供給我們的代碼。

package lab06; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.Iterator; 

public class MergeSort { 


private static final double[] ArrayToBeSorted = null; 





public static int[] mergeSort(int [] list) { 
    if (list.length <= 1) { 
     return list; 
    } 

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

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

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

private static void merge(int[] first, int[] second, int [] result) { 
    // Merge both halves into the result array 
    // Next element to consider in the first array 
    int iFirst = 0; 
    // Next element to consider in the second array 
    int iSecond = 0; 

    // Next open position in the result 
    int j = 0; 
    // As long as neither iFirst nor iSecond is past the end, move the 
    // smaller element into the result. 
    while (iFirst < first.length && iSecond < second.length) { 
     if (first[iFirst] < second[iSecond]) { 
      result[j] = first[iFirst]; 
      iFirst++; 
     } else { 
      result[j] = second[iSecond]; 
      iSecond++; 
     } 
     j++; 
    } 
    // copy what's left 
    System.arraycopy(first, iFirst, result, j, first.length - iFirst); 
    System.arraycopy(second, iSecond, result, j, second.length - iSecond); 
} 





public static void main(String args[]) throws Exception 
{ 
    String list=""; 
    int i=0,n=0; 

    MergeSort s= new MergeSort(); 
    ArrayList<Integer> arrlist=new ArrayList<Integer>(); 
    System.out.println(" "); 
    System.out.println(" "); 
    System.out.println("Please enter the list of elements,one element per line"); 
    System.out.println(" write 'STOP' when list is completed "); 
    BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); 
    while(!(list=bf.readLine()).equalsIgnoreCase("stop")){ 
     int intelement=Integer.parseInt(list); 
     arrlist.add(intelement); 

    } 

    int elementlist[] = new int[arrlist.size()]; 
    Iterator<Integer> iter = arrlist.iterator(); 
    for (int j=0;iter.hasNext();j++) { 
     elementlist[j] = iter.next(); 
    } 

    elementlist=mergeSort(elementlist); 
    System.out.println(" "); 
    System.out.println(" "); 
    System.out.println(" "); 
    System.out.println("Values after Merge Sort : "); 
    for (int j=0;j<elementlist.length;j++) { 
     System.out.println(elementlist[j]+" "); 
    } 
} 

}

誰能幫我這個難題呢?我需要做的就是使用教授的代碼生成隨機數,並查看排序需要多長時間。

+0

你先生成一些隨機數並存儲在表中。 你需要使mergesort來引入一個表。 在開始時間1和經過的變量之間,您稱之爲合併排序 – Jimmysnn

+0

這似乎是什麼問題? – Kayaman

回答

1

請使自己的代碼來完成你的功課。另外,這是一個剪切和粘貼問題,請不要在這裏提出這樣的問題。

  1. 在您的項目中剪切並粘貼mergeSort和merge方法。
  2. 在mergeSort和merge方法中將所有類型的int []更改爲double []。
  3. 在時間1和經過時間之間放置mergeSort(ArrayToBeSorted);

對於其他排序,請將您自己的排序代碼作爲方法,並使用自己的方法而不是mergeSort重試步驟1-3。