C中的数组从低到高排序(不使用qsort)

时间:2010-12-10 10:07:07

标签: c arrays algorithm sorting

我有一个函数,它接受一个数字数组,并从低到高排序。到目前为止,我有这个算法,但输出不是我所期望的。有人可以对此有所了解。我不能使用任何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);
}

5 个答案:

答案 0 :(得分:5)

您正在尝试实施冒泡排序算法。 Read this to understand what your code is missing

答案 1 :(得分:5)

for循环i<=count中的条件不正确。

数组中的有效索引为0count-1
由于您在循环中访问索引i+1处的值:

if (numbers[i] > numbers[i+1])

i可以将0的值设为count-2,因此将条件更改为i<=count-2i<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的布尔值。然后重新考虑你的编纂,也许只是反过来......