2016-11-27 7 views
0

Javaの選択ソートを使用して、int配列のスワップと比較の数を調べようとしています。私はループ内のどこでスワップと比較がカウントされているのか混乱しています。どんな指針も大変ありがとうございます。選択ソーターの作成に問題がある

public class IntSelectionSorter { 

public static int count = 0; 
public static int count2 = 0; 

public static void selectionSort(int[] array) 
{ 
    int startScan; 
    int index; 
    int minIndex; 
    int minValue; 

    for (startScan = 0; startScan < (array.length - 1); startScan++) 
    { 
     minIndex = startScan; 
     minValue = array[startScan]; 

     for (index = startScan + 1; index < array.length; index++) 
     { 
      count2++; 
      if (array[index] < minValue) 
      { 
       minValue = array[index]; 
       count++; 
       minIndex = index; 
      } 
     } 
     array[minIndex] = array[startScan]; 
     count++; 
     array[startScan] = minValue; 
     count++; 
    } 
} 

}

+0

特定の問題とは何ですか?あなたは何をすることを期待していますか?代わりに何をしますか? –

+0

私は、スワップと比較の回数を数えると仮定しているint配列の選択ソートを作成しています。私は既に同じint配列を使用するバブルソーターを作成しました。私はこのセレクションソーターの適切な場所でスワップ(カウント)と比較(カウント2)を使用しているかどうかはわかりません。私は48のスワップと300の比較の答えを得ています。私が "count"と "count2"を置く場所を変更すると、私は別の答えを得ます。他のファイルも投稿できます。 – Nosuchluck

答えて

0

COUNT2は、右のようです。次のようにカウントが変更されるべきである:

for (startScan = 0; startScan < (array.length - 1); startScan++) 
{ 
    minIndex = startScan; 
    minValue = array[startScan]; 

    for (index = startScan + 1; index < array.length; index++) 
    { 
     count2++; 
     if (array[index] < minValue) 
     { 
      minValue = array[index]; 
      // count++; delete this 
      minIndex = index; 
     } 
    } 
    if (minIndex != startScan) { 
     array[minIndex] = array[startScan]; 
     count++; 
     array[startScan] = minValue; 
    } 
} 

基本的に、増加カウントが唯一の場合STARTSCANの値よりも小さいSTARTSCAN後、アレイ内の他の数があるとき、すなわちを交換する必要があることです。

+0

ありがとうございました!それは理にかなっています。しかし、私は0スワップと300比較の数を取得しています。それは正しいとは思わない。 – Nosuchluck

+0

私はこれをテストし、正しい答えを出しました。入力配列[2,1,4,3]がチェックされ、実際には2回のスワップが行われます(最初はインデックス0、2番目のインデックスは2)。あなたがしようとしている入力は何ですか? –

0

パブリッククラスSortingTest {

public static void main(String[] args) 
{ 
    int[] values = { 1,53,86,21,49,32,90,65,33,11,34,68,54,32,78,80,35,22,96,59,265,44324,123,3123,25435}; 

    System.out.println("Original Order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    IntBubbleSorter.bubbleSort(values); 

    System.out.println("\nSorted order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    System.out.println(); 

    System.out.print("\n Bubble Sort Swaps:" + IntBubbleSorter.count); 
    System.out.print("\n Bubble Sort Comparisons:" + IntBubbleSorter.count2); 

    System.out.println(); 

    System.out.println("\nOriginal Order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    IntSelectionSorter.selectionSort(values); 

    System.out.println("\nSorted order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    System.out.println(); 

    System.out.print("\n Selection Sort Swaps:" + IntSelectionSorter.count); 
    System.out.print("\n Selection Sort Comparisons:" + IntSelectionSorter.count2); 

    System.out.println(); 

    System.out.println("\nOriginal Order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    IntInsertionSorter.insertionSort(values); 

    System.out.println("\nSorted order: "); 
    for (int element : values) 
     System.out.print(element + " "); 

    System.out.println(); 

    System.out.print("\n Insertion Sort Swaps:" + IntInsertionSorter.count); 
    System.out.print("\n Insertion Sort Comparisons:" + IntInsertionSorter.count2); 
} 

}