交换/排序数组会复制数字

时间:2017-12-17 02:53:20

标签: c++ arrays for-loop swap

我正在自学c ++并且我正在学习将用户输入的int数组传递给另一个函数,在该函数中它对数组进行排序并将其吐出到控制台。我测试了传递数组本身并且它可以正常工作,但是,我的排序确实会混淆某个地方,因为一个数字是重复的。这是我的交换代码。

 while(1){
        swapped = 0;

        for(int i4 = 0; i4 < count; i4++){
            if(sdata[i4] > sdata[i4 + 1]){
                int temp = sdata[i4];
                sdata[i4] = sdata[i4 + 1];
                sdata[i4 + 1] = temp;
                swapped = 1;
            }
        }

        if(swapped == 0){
            break;
        }
    }

这是运行时返回的值。

 How many numbers? 5
[1] Please enter a value: 5
[2] Please enter a value: 3
[3] Please enter a value: 1
[4] Please enter a value: 2
[5] Please enter a value: 4
Original numbers: 5 3 1 2 4 
Swapped numbers: 1 2 3 3 4 

我尝试在新文件中重写交换只是为了测试交换本身,但由于某种原因我无法让它工作。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

你可以做的是使用选择排序,其中元素交换数组中的最大和最小数字。

以下是代码:

    for(int i = 0; i<count-1; i++)
  {
    for(int j = i+1; j<count; j++)
    {
      if(sdata[i] > sdata[j])
        {
          int temp = sdata[i];
          sdata[i] = sdata[j];
          sdata[j] = temp;
        }
    }
  }