2015-09-08 24 views
0

我很抱歉,如果我的問題憤怒任何人,因爲有幾個選擇排序相關的問題已經出現在這裏堆棧溢出,但我幾乎看過所有這些,仍然發現自己困惑。如何寫一個選擇正確排序

我只是試圖寫一個選擇排序在正確的格式。但是,我發現很多人在他們中使用兩個IF語句,而另一些則沒有。

我需要知道的是如果選擇排序需要兩個IF語句,還是我寫的方式可以接受?

我最終什麼事到目前爲止,寫的是:

public static int[] selectionsort(int[] anArray){ 
    int temp; 

    for(int i = 0; i < anArray.length; i++){ 
     for(int leastIndex = i + 1; leastIndex < anArray.length; leastIndex++){ 
      if(anArray[i] > anArray[leastIndex]){ 
       temp = anArray[i]; 
       anArray[i] = anArray[leastIndex]; 
       anArray[leastIndex] = temp; 
      } 
     } 
    }  
    return anArray; 
} 

程序沒有運行,但我需要確保我已經排序正確寫入的選擇。

+0

選擇排序的基本功能是什麼?你是否已經在你的代碼中實現了這一點?問自己這些問題,並寫出一些潛在的數據集的方法的每一步,以確保你正確理解它 – andrewdleach

+0

選擇排序是一種算法。排序算法。算法就像食譜!你是否正確遵循食譜?根據算法的定義,你的函數是否是必要的步驟? – Luminous

+0

@andrewdleach選擇排序的基本功能是對我相信的數組進行排序,而我的代碼似乎正確地排列了任何數組。然而,在這裏提出這個問題之前,我開始執行紙上的代碼/計算來看看每次迭代後數組是如何變化的,而且它看起來非常類似於冒泡排序,所以我擔心可能我沒有做對了,寫了一個關於事故的泡沫排序。我擔心這可能是我需要的兩個IF聲明,我到處都可以看到。 – GL007

回答

0

你確實在某些方面實現了一個選擇排序,在你的實現中我唯一會改變的是「鼓泡」,你泡泡最小的int而不是保持它的索引,這導致了一些額外的交換,並且雖然你的實現不是冒泡排序,但它與冒泡排序混淆。

int[] selectionSort(int[] arr) { 
    int minIndex; 
    for (int i=0;i<arr.length;i++) { 
     minIndex= i; 
     for (int j=i+1;j<arr.length;j++) { 
      if (arr[minIndex]>arr[j]) 
      minIndex = j; 
     } 
     swap(arr,i,j); 
    } 
} 
+0

好吧,所以我可以理解這一切,但有一件事讓我困惑。如果j = i + 1,當j遞增時會發生什麼?那麼等於什麼? – GL007

+0

我+ 2我猜大聲笑 –

+0

哦,好的。對不起,哈哈。但我還有一個問題。如果我不打算使用交換,那麼我是否只是將我目前在我的IF語句中的內容從我的原始代碼中提取出來? – GL007

0

你只需要1 if語句,這是第一個數組的值與第二陣列比較。 對於語法,我寧願你這樣使用它..它會更容易.. 在下面的語法中,我已經完成升序選擇排序整數只使用2 for循環.. U可以使用更多,如果你想爲了的方便

import java.util.*; 
class selctionsort 
{ 
    public static void calc() 
    { 
     int i , j; 
     int temp; 
     int n ; 
     Scanner sc=new Scanner(System.in); 
     System.out.println("Enter how many Numbers to be sorted"); 
     n=sc.nextInt(); 
     int a[]=new int [n]; 
     for(i=0;i<n;i++) 
     { 
      System.out.println("Enter The Numbers"); 
      a[i]=sc.nextInt(); 
     } 
     for(i=0;i<n;i++) 
     { 
      for (j=i;j<n;j++) 
      { 
       if(a[i]>a[j]) 
       { 
        temp=a[i]; 
        a[i]=a[j]; 
        a[j]=temp; 
       } 
      } 
     } 
     for(i=0;i<n;i++) 
     { 
      System.out.println("Sorted array is " +a[i]); 
     } 
    } 
}