通过向右移动来排序值数组

时间:2015-10-23 20:23:13

标签: c++ arrays function sorting

我必须创建一个方法,对从最低值到最高值的值数组进行排序。这些函数应该起作用的方式是它抓取每个值,试图通过将每个更大的值向右移动,从左到右按升序排列它们。

我已经完成了以下功能:

int findIndex(double *arr, double num, int length)
{

   for (int i = 0; i < length; i++)
   {
      if (arr[i] > num)
         return i;
     }
   return length - 1;
}

void placeOnIndex(double *arr, double num,int index, int length)
{

   if (length > 1 && arr[index] != num) 
   {
       for (int i = length - 1; i > 0; i--)
       {
            arr[i] = arr[i - 1];
       }

       arr[index] = num;
   }
}

void insertSort(double* arr, int length)
{
   for (int ix = 0; ix < length; ix++)
   {
       double num = arr[ix]; //Current value to put as far to the left as possible
       int index = findIndex(arr, num, ix+1);  //Locates index to put it
       placeOnIndex(arr, num, index, ix+1); //Uses the index to put in the right place
   }

}

void main()
{
   double arr[4] = {1,8,4,5};
   insertSort((arr), 4);
}

我的问题是这个数组的输出变成:    1,1,5,8

显然它有时会覆盖我的数组中的第二个元素。有时它有效,有时它不起作用。如果数组更长,则会覆盖更多值。

对不起,如果看起来很混乱,英语不是我的母语。

1 个答案:

答案 0 :(得分:1)

这一行

for (int i = length - 1; i > 0; i--)

导致所有元素向右移动,而不仅仅是应该移动的元素。

你需要

for (int i = length - 1; i > index; i--)