简单排序功能不起作用。建议?

时间:2016-11-12 01:42:37

标签: sorting processing

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打印到控制台。

enter image description here

如果您能够在不创建非常复杂的功能的情况下提供建议,我将非常感激。我想改变我创建的现有功能,以便它可以工作。

到目前为止,这是我的函数的输出: enter image description here

非常感谢任何意见或建议。

1 个答案:

答案 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;
     }
   }
 }
}

最简单的冒泡排序 - 这就是我想到的。