我有一个函数,它接受一个数字数组,并从低到高排序。到目前为止,我有这个算法,但输出不是我所期望的。有人可以对此有所了解。我不能使用任何C库函数。
/*
Sort "count" numbers stored in array numbers[] in non-decreasing order.
There may be duplicate numbers in the array.
You may use any sorting algorithm that you know.
*/
void sort( double numbers[], int count )
{
int i, j, k;
//printf("%d", count);
double temp;
do{
j = 0;
for (i = 0;i<=count;i++){
if (numbers[i] > numbers[i+1]){//this was numbers[k], which was an error
j = 1;
temp = numbers[i];
numbers[i] = numbers[i+1];
numbers[i+1] = temp;
}
}
} while (j == 1);
}
答案 0 :(得分:5)
您正在尝试实施冒泡排序算法。 Read this to understand what your code is missing
答案 1 :(得分:5)
for
循环i<=count
中的条件不正确。
数组中的有效索引为0
到count-1
。
由于您在循环中访问索引i+1
处的值:
if (numbers[i] > numbers[i+1])
i
可以将0
的值设为count-2
,因此将条件更改为i<=count-2
或i<count-1
答案 2 :(得分:0)
使用k
的值,但永远不会初始化或分配变量。在某个包含numbers[count]
元素的数组具有最大索引count
count-1
答案 3 :(得分:0)
您尚未开始k
。
只要移动一个数字,算法就会停止。你需要移动所有这些。
我认为你在while循环之外错过了k
上的for循环,但由于我不完全确定你在这里尝试做什么,我无法确定。
为什么不能实现自己的qsort()函数?这是允许的吗?尝试在线阅读一些排序算法。
答案 4 :(得分:0)
if(numbers [i]&gt; numbers [k]){
应该是
if(numbers [i]&gt; numbers [i + 1]){
k
根本没用过。
for (i = 0;i <= count;i++){
应该是
for (i = 0; i < count-1;i++){
因为只有从0到count-1的元素,然后你将与下一个元素进行比较。
j
的名称是废话。将它设为一个名为didSwap的布尔值。然后重新考虑你的编纂,也许只是反过来......