C中的冒泡排序:功能不改变数组数据

时间:2016-12-09 09:37:24

标签: c bubble-sort

代码:

#include <stdio.h>

void testSort(int values[], int n);

int main(void)
{
    int hs[] = {5,3,2,1,4};
    printf("Unsorted: %i %i %i %i %i\n", hs[0], hs[1], hs[2], hs[3], hs[4]);
    testSort(hs, 5);

    printf("Sorted: %i %i %i %i %i\n", hs[0], hs[1], hs[2], hs[3], hs[4]);
}

void testSort(int values[], int n)
{
    for (int i = 0; i < n-1; i++)
    {
        int hold;
        int current = values[i];
        int next = values[i + 1];

        if (current > next)
        { 
            hold = current;
            current = next;
            next = hold;
        }
    }
    return;
}

我正在尝试进行冒泡排序,现在它通过数组一次,但我的问题是:为什么调用函数后我的hs[]没有更新?第二个printf表明它保持不变。

修改 如上所述,事实证明我 正在更改数据,而副本。出于某种原因,当我创建变量current/next时,我感觉好像他们是代表 values[i]/values[i+1]但实际上我只是创建新变量并传递值< / {>的values[0]为5,并将其分配给current。显然保持值[]不变。谢谢大家

2 个答案:

答案 0 :(得分:2)

问题是你只修改了函数的局部变量,而不是数组元素。

与此计划打印1而不是2的原因相同:

int main()
{
    int array[] = {1};
    int x = array[0];
    x = 2;
    printf("array[0] = %d\n", array[0]);
    return 0;
}

您需要为数组的元素指定值:

void testSort(int values[], int n)
{
    for (int i = 0; i < n-1; i++)
    {
        if (values[i] > values[i+1])
        { 
            int hold = values[i];
            values[i] = values[i+1];
            values[i+1] = hold;
        }
    }
}

一旦你解决了这个问题,你就会注意到这个功能仅适用于某些输入 解决这个问题只是一个练习。

答案 1 :(得分:0)

请尝试以下代码: -

 void bubble_sort(int list[], int n){
      int c, d, t;
      for (c = 0 ; c < ( n - 1 ); c++)
      {
         for (d = 0 ; d < n - c - 1; d++)
          {
             if (list[d] > list[d+1])
             {
                 t         = list[d];
                 list[d]   = list[d+1];
                 list[d+1] = t;
             }
          }
     }
 }