2015-12-08 129 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; 

    } 
}