2015-12-08 81 views
2

我目前是一名在插入排序方法上工作的學生。 下面是代碼:插入數組排序方法

//Insertion Sorting of an Integer array 
void InsertionSort(int insertVals[]){ 


    //Systematic processing of the Array 
    for(int i = 0; i < INITSIZE - 1; i++){ 
     //Value to check 
     int temp = insertVals[i]; 

     //Index placeholder for the insterion sort 
     int k; 

     //Shifts the int array 
     for(k = i; k > 0 && insertVals[k-1] > temp; k--){ 
      insertVals[k] = insertVals[k-1]; 
     } 

     //Inserts the checked value back into the array 
     insertVals[k] = temp; 

    } 
} 

在我的測試中,我已經給它的陣列從左至右:

307 249 73 158 430 272 44 378 423 209 
440 165 492 42 487 3 327 229 340 112 
303 169 209 157 60 433 99 278 316 335 
97 326 12 267 310 133 479 149 79 321 
467 172 393 336 485 245 228 91 194 357 
    1 153 208 444 168 490 124 196 30 403 
222 166 49 24 301 353 477 408 228 433 
298 481 135 13 365 314 63 36 425 169 
115 94 129 1 17 195 105 404 451 298 
188 123 5 382 252 66 216 337 438 144 

的方法產生,從左至右依次爲:

314 63 314 63 36 425 36 169 425 169 
115 115 94 129 94 129 1 17 195 105 
404 451 298 188 123 5 382 252 66 216 
337 438 144 1 17 195 105 404 451 298 
188 123 5 382 252 66 216 337 438 144 
228 229 245 249 252 267 272 278 298 298 
301 303 307 310 314 316 321 326 327 335 
336 337 340 353 357 365 378 382 393 403 
404 408 423 425 430 433 433 438 440 444 
451 467 477 479 481 485 487 490 492 144 

我錯誤地編碼了什麼?

謝謝!

編輯:

//In main... 
Printing(insertionSortValues, "Insertion Sorted Array"); 

//Function for Print 
void Printing(int vals[], string s){ 
    cout << s << ":" << endl; 
    for(int i = 0; i < INITSIZE; i++){ 
     if(i % 10 == 0){ 
      cout << endl; 
     } 
     cout << setw(3) << vals[i] << " "; 
    } 
    cout << endl; 
} 
+1

試着改變你的第一個'for'循環開始於'INT I = 1' ... https://en.wikipedia.org/wiki/Insertion_sort – DigitalNinja

+0

它仍然會產生相同的排序。我想我正在做類似於維基頁面的事情。 –

+1

是的,當與維基百科鏈接比較時,你的算法看起來是正確的(除此之外)。難道只是你如何打印排序的數組?也許發佈該代碼。 – DigitalNinja

回答

0

這個問題的解決辦法,可以@PaulMcKenzie得到解決。 線:

for(int i = 0; i < INITSIZE - 1; i++){ 

成爲需要:

for(int i = 0; i <= INITSIZE - 1; i++){ 

下面是校正函數。

//Insertion Sorting of an Integer array 
void InsertionSort(int insertVals[]){ 


    //Systematic processing of the Array 
    for(int i = 0; i <= INITSIZE - 1; i++){ 
     //Value to check 
     int temp = insertVals[i]; 

     //Index placeholder for the insterion sort 
     int k; 

     //Shifts the int array 
     for(k = i; k > 0 && insertVals[k-1] > temp; k--){ 
      insertVals[k] = insertVals[k-1]; 
     } 

     //Inserts the checked value back into the array 
     insertVals[k] = temp; 

    } 
}