2013-01-17 222 views
0

我試圖代碼的選擇排序算法操縱陣列(需要隨機的一組十個數字,輸入的由用戶,並以升序輸出該列表)。我理解算法如何工作,並認爲我已經想通了的事,但在for循環不工作,我期待的方式,我不能爲我的生活弄清楚它是什麼。在C++ for循環

這裏是我遇到的問題的一個例子: 輸入{9,8,7,6,5,4,3,2,1,0},輸出{0,1,2,3, 4,9,6,7,8,9}

無論我輸入什麼數字,第五個索引似乎總是關閉。但是,如果原始數字集具有任意給定數字的倍數,那麼將會有是其他更難以查明的錯誤。我希望解決的第五個問題指數後,其他問題也就迎刃而解了,或者至少更容易查明。

下面是那麼我的主要功能(減去它實際上是說主要的部分)的全部。

int arr[10];//array of integers input by user 
int num; //smallest number in array 
int temp; //temp variable for swapping numbers 
int ind; //index of where temp was found 

cout << "Enter ten random integers: " << endl; 
for(int i=0; i<10; i++) 
{ 
    cout << "[" << i << "] = "; 
    cin >> arr[i]; 
} 

cout << endl; 

for (int j=0; j<10; j++) 
{ 
    num = arr[j]; 
    temp = arr[j]; 

    for (int k=j; k<10; k++) /*after this loop, temp should have lowest int and ind 
           should have its location*/ 
    { 
     if(temp > arr[k]) 
     { 
      temp = arr[k]; 
      ind = k; 
     } 
    } 
    arr[j] = temp; 
    arr[ind] = num; 
} 

for(int l = 0; l<10; l++) 
{ 
    cout << arr[l] << " "; 
} 

回答

0
temp = arr[0]; // You need to set it to sth diferent then 0 

for(int i=0; i<10; i++) 
{ 
    if(arr[k] < temp) 
    { 
      temp = arr[k]; 
      ind = k; 
    } 
} 

而完成的。

對於分選(123):

for (i = 10; i > 0; i--) 
    { 
    for (j = 1; j <= i; j++) 
    { 
     if (numbers[j-1] > numbers[j]) 
     { 
     temp = numbers[j-1]; 
     numbers[j-1] = numbers[j]; 
     numbers[j] = temp; 
     } 
    } 
    } 

和反向(321)

for (i = 10; i > 0; i--) 
    { 
    for (j = 1; j <= i; j++) 
    { 
     if (numbers[j-1] < numbers[j]) 
     { 
     temp = numbers[j-1]; 
     numbers[j-1] = numbers[j]; 
     numbers[j] = temp; 
     } 
    } 
    } 
+0

我顯然試圖過於複雜的問題。謝謝,這幫了很多。 – Vorondil