我想使用插入排序对数组进行排序。
我没有改变和重新排列数组本身的元素,而是使用另一个名为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