我的排序功能似乎只重复列出了千位中的3个数字。不知道为什么。有什么想法吗?
我的排序数组从这里开始。我创建了一个迭代n个数字的for循环。然后我比较这些值并创建一个交换算法。我认为我的交换算法存在缺陷。
/**
* Sorts array of n values.
*/
void sort(int values[], int n)
{
//TODO: implement an O(n^2) sorting algorithm
for (int i = 0; i < n - 1; i++)
{
if (values[i] < values[i + 1])
{
int holder = values[i];
values[i] = holder;
values[i + 1] = values[i];
values[i] = holder;
printf("%i\n", values[i]);
}
}
return;
}
答案 0 :(得分:0)
以下行中存在逻辑错误:
int holder = values[i];
values[i] = holder;
values[i + 1] = values[i];
values[i] = holder;
我假设您要交换values[i]
和values[i+1]
的值。
您未在该代码中的任何位置提取values[i+1]
的值,以将其分配给values[i]
。
您需要使用:
int holder = values[i];
values[i] = values[i + 1];
values[i + 1] = holder;
答案 1 :(得分:0)
这种情况正在发生,因为您没有正确实现冒泡排序。这样做如下 -
/**
* Sorts array of n values.
*/
void sort(int values[], int n)
{
//TODO: implement an O(n^2) sorting algorithm
for (int i = 0; i < n - 1; i++)
{
for(int j=0;j<n-i-1;j++)
{
if (values[j+1] < values[j])
{
int holder = values[j];
values[j] = values[j + 1]
values[j + 1] = holder;
printf("%i\n", values[j]);
}
}
}
return;
}
在你的算法中,你只遍历数组一次(因为只有一个用于循环),而为了正确排序,你需要有两个嵌套循环。