2012-03-15 60 views
1

我想我已經完成了選擇排序,但我不確定。這真的是選擇排序的實現嗎?在Java中選擇排序的實現

static void selectionSort() 
    { 
     int min = Integer.MIN_VALUE; 
     int n = 0; 
     for(int I=0; I<arraySize; I++) 
     { 

      min = dataArray[I]; 
      for(int j=I; j<n; j++) 
      { 
       if(dataArray[min]<dataArray[j]) 
        { 
         min = j; 
         if(dataArray[min] < dataArray[I]) 
         { 
          int temp = dataArray[I]; 
          dataArray[I] = dataArray[min]; 
          dataArray[min] = temp; 
         } 
        } 
      } 
     } 
    } 
+0

如果在內循環中,在第一個循環開始之前有'j DonCallisto 2012-03-15 13:23:36

回答

4

我不知道我明白你的算法是如何工作的。具體而言,這樣做

min = dataArray[i]; 

再後來

dataArray[min]<dataArray[j] 

即你把min既作爲在陣列中的值,和索引。

選擇排序的工作原理如下:

  1. 在列表中找到的最小值
  2. 與價值交換它在第一位置
  3. 重複上述步驟,在列表的其餘

source


準確地實現選擇排序需要爲您的代碼的變化將是以下幾點:

  1. 變化內環至只是找出最小的元素的索引。舉例來說,它叫做minIndex
  2. 在之後做內部循環交換。即,索引爲I的交換元件與minIndex

哦,和DonCallisto在評論中指出的那樣,你可能想要做的,而不是n = dataArray.length :-) n = 0

+0

我把同樣的i值賦給j – Kiril 2012-03-15 13:28:51

+0

'for(int j = I; j DonCallisto 2012-03-15 13:33:31

+0

哈哈,不,那似乎也是一個小問題;-) – aioobe 2012-03-15 13:37:01

2
public class SelectionSort { 

/** 
    * @Author Chandrasekhara Kota 
    */ 

public static void main(String[] args) { 

     int arr[]={9,1,8,5,7,-1,6,0,2,2718}; 
     int sortedArr[]=selectionSort(arr); 
     for (int i = 0; i <sortedArr.length; i++) 
     { 
      System.out.println(sortedArr[i]); 
     } 

     } 

     private static int[] selectionSort(int[] arr) { 

     int minIndex, tmp; 
     int n = arr.length; 
     for (int i = 0; i < n - 1; i++) 
     { 
       minIndex = i; 
       for (int j = i + 1; j < n; j++) 
        if (arr[j] < arr[minIndex]) 
         minIndex = j; 
       if (minIndex != i) { 
        tmp = arr[i]; 
        arr[i] = arr[minIndex]; 
        arr[minIndex] = tmp; 
       } 
     } 
    return arr; 

} 

} 
0

這裏是Java中的一個選擇排序的實現 -

public class SelectionSort { 

static int intArray[] = { 10, 5, 100, 1, 10000 }; 

public static void doSort() { 
    for (int outer = 0; outer < intArray.length; outer++) { 
     int minPosition=outer; 
     for(int inner=outer;inner<intArray.length;inner++){ 
      if(intArray[inner]<intArray[minPosition]){ 
       minPosition=inner; 
      } 
     } 
     int temp=intArray[minPosition]; 
     intArray[minPosition]=intArray[outer]; 
     intArray[outer]=temp; 
    } 
} 

public static void printArray() { 
    for (int i = 0; i < intArray.length; i++) { 
     System.out.print(" " + intArray[i]); 
    } 
} 

public static void main(String args[]) { 
    System.out.print("Array Before Sorting->"); 
    printArray(); 
    doSort(); 
    System.out.print("\nArray After Sorting ->"); 
    printArray(); 
} 

}

上述代碼摘自 - http://www.javabrahman.com/algorithms-in-java/selection-sort-in-java/。這個鏈接對上述代碼的工作有詳細的解釋,以防您需要相同的代碼。