2013-10-03 46 views
0

在這個程序中,我找到了使用插入排序的隨機數組的排序數組。所以我現在面臨的問題是,在這個程序中,我還需要找出所做比較的次數以及在此程序中所作的分配次數。我嘗試了很多方法來找到比較和分配。我想我已經比較了,但是當我輸出比較和作業時,他們應該彼此緊密相等。那麼在我的程序中,當我輸出它的時候,它在某些情況下或者全部都不會很好地等同於它。我能做什麼?我不認爲我正在使用冒泡排序,除非我是......我將不得不從頭開始。InsertionSort程序

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package insertionsort; 
import java.util.*; 
/** 
* 
* @author Owner 
*/ 
public class InsertionSort 
    { 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) 
    { 
     Scanner input= new Scanner(System.in); 
     int randomInt; 
     int min; 
     int max; 
     int [] array; 
     int random=0; 
     int assign; 
     int temp; 
     int comparison=0; 
     int assignment=0; 
     int length; 
     int a; 
     int k; 

     System.out.print("How many random integers? "); 
     randomInt=input.nextInt(); 
     System.out.print("Enter the minimum: "); 
     min=input.nextInt(); 
     System.out.print("Enter the maximum: "); 
     max=input.nextInt(); 
     array=new int [randomInt]; 

     for (a=0; a<randomInt; a++) 
     { 
      assign=random; 
      random=(int)((Math.random()*(max-min+1)))+min; 
      array[a]=random; 
     } 
     System.out.println(); 
     System.out.print("The randomized array is "); 
     for(int dot=0; dot<randomInt;dot++) 
     { 
      if (dot==randomInt-1) 
       System.out.printf("%d.", array[dot]); 
      else   
       System.out.printf("%d, ",array[dot]); 
     } 
     System.out.println(); 
     length=array.length; 
     for (a=1;a<length; a++) 
     { 
      for (int b=0; b<a;b++) 
      { 
       comparison++; 
       if(array[b]>array[a]) 
       { 
        temp=array[b]; 
        array[b]=array[a]; 
        for (k=a;k>b;k--) 
        { 
         array[k]=array[k-1]; 
         assignment++; 
        } 
        array[b+1]=temp; 
         assignment++; 
       } 
      } 
     } 
     System.out.print("The sorted array is "); 
     for (a=0;a<length; a++) 
     { 
      if (a==length-1) 
       System.out.printf("%d.",array[a]); 
      else 
       System.out.printf("%d, ",array[a]); 
     } 
     System.out.println(); 
     System.out.println("Total comparison count during sorting is " +comparison+ "."); 
     System.out.println("Total assignment count during sorting is " +(assignment)+ "."); 
    } 
} 
+3

「他們應該密切相等」 - 爲什麼?如果輸入已經排序,你會得到比較,但沒有分配。 – Rup

+0

很抱歉,首先我找到了一些隨機整數。然後我將這些分配給數組。然後,我將它們按照我想要的順序排序,這是最不重要的。那麼在我對它們進行排序的循環中,我需要找到賦值和比較的次數。我不知道爲什麼不會有任何任務。我不知道爲什麼他們必須相對平等,但他們永遠不會平等。 – user2804805

+0

當然,但是有可能這些隨機數字已經被排序。所以誰告訴你他們必須相對平等,爲什麼你認爲你得到的是錯誤的?它對我來說很好。如果您使用大型隨機輸入,例如10000個元素,他們可能傾向於相同的數量級,當然。 – Rup

回答

0

算比較和分配的最簡單方法是創建一個類,它會做的比較和分配和使用它的方法,而不是<>和「=」。當然,它的方法將計數比較和分配。你也可以用你的類包裝int,並用它自己的方法比較/分配它。