我必须创建一个方法,对从最低值到最高值的值数组进行排序。这些函数应该起作用的方式是它抓取每个值,试图通过将每个更大的值向右移动,从左到右按升序排列它们。
我已经完成了以下功能:
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
显然它有时会覆盖我的数组中的第二个元素。有时它有效,有时它不起作用。如果数组更长,则会覆盖更多值。
对不起,如果看起来很混乱,英语不是我的母语。
答案 0 :(得分:1)
这一行
for (int i = length - 1; i > 0; i--)
导致所有元素向右移动,而不仅仅是应该移动的元素。
你需要
for (int i = length - 1; i > index; i--)