void sort_records_by_id (int []indices, int []students_id )
{
for (int k = 1; k<students_id.length; k++)
{
for (int j = k; j>0 && students_id[j]<students_id[j-1]; j--)
{
int place_holder = indices[j];
indices[j] = indices [j-1];
indices[j-1] = place_holder;
}
}
}
您好,
我必须创建一个能够对整数数组进行排序的函数,而不是通过更改和重新排列其内容,而是通过更改另一个名为索引的整数数组中的整数顺序。所以,我会有一个带有一系列ID的数组,例如:让我们称之为“[#]代表索引[0] 10001 12001 2 12334 [3] 14332 [4] 999999 [5] 10111 有一个相应的数组,整数值[#]是索引让我们调用这个arr [0] 0 11 [2} 2 [3] 3 [4] 4 [5] 5这样它们对应于我们所拥有的索引另一个数组。 现在,我们必须改变“arr”的顺序,这样元素的顺序就是它按照排序顺序对应于数组id中索引的顺序。请注意,数组ID不会以任何方式更改。 因此,我们可以使用for循环,arr和array id的值,按升序将id打印到控制台。
如果您能够在不创建非常复杂的功能的情况下提供建议,我将非常感激。我想改变我创建的现有功能,以便它可以工作。
非常感谢任何意见或建议。
答案 0 :(得分:0)
在为students_id数组编制索引时,请不要使用j和j-1,而是使用j和1 - 而不是指数[j]和指数[j-1]。多亏了这一点,您将使用students_id数组更改indices数组中的顺序,以获取要比较的值。
for (int j = k; j>0 && students_id[indices[j]]<students_id[indices[j-1]]; j--)
我也会将循环改为
void sort_records_by_id (int []indices, int []students_id )
{
for (int k = 1; k<students_id.length; ++k)
{
for (int j = 0; j<k; ++j)
{
if(students_id[indices[j]]>students_id[indices[j+1]]) {
int place_holder = indices[j];
indices[j] = indices [j+1];
indices[j+1] = place_holder;
}
}
}
}
最简单的冒泡排序 - 这就是我想到的。