我想使用插入排序對數組進行排序。
我沒有改變和重新排列數組本身的元素,而是使用另一個名爲rank的數組來映射指向原始數組。
這裏是我的代碼通過插入排序排序數組
int i,j;
int ar[] = {50,14,51,25,10};
int rank[] = {0,1,2,3,4};
for(i=1 ; i< 5 ; ++i) // second element onwards
{
int temp = rank[i]; // stores current value in temp variable
/**
* temp = 1
* j = 0
*/
j = rank[i] - 1;
while (ar[temp] < ar[ rank[j] ] && j > -1)
{
rank[j+1] = rank[j]; // move elemnts in map forward
j--;
} // end loop
// insert temp at proper place
rank[j+1] = temp;
}
for(i=0 ; i< 5 ; ++i)
printf("Rank : %d, Number : %d \n",rank[i],ar[i]);
但是,它不是給人一種預期的輸出。任何人都可以指出邏輯中的錯誤嗎?
您將不得不進一步縮小它,而不僅僅是「它不工作」。獲取簡單的測試用例,使用調試器並跟蹤代碼的執行情況。很可能,這將幫助您找到解決方案。如果不是,它至少會縮小到特定的代碼部分。 – wolfPack88
'j =等級[i] -1;'。你是想減少元素「i」中的值還是在'i'之前訪問元素? –
我用netbeans調試器。我發現j是-2而不是停在-1。所以我在while循環中添加了額外的約束j> -1,當j = -1時,然後在while循環中應該返回false來終止它。但它是真實的,我不知道爲什麼。 – Shashi