显示排序模拟

时间:2016-12-15 13:13:19

标签: c++ sorting bubble-sort

我正在尝试显示此冒泡排序的模拟,并且我使用了具有参考值的函数交换器,但是当我尝试在交换后打印它时它也打印出内存地址。我该如何解决这个问题?

void swapper(int &a, int &b) {
  int temp = a;
  a = b;
  b = temp;

  return;
}

int main(){

//Bubble sort

int arr[] = {-2, 45, 0, 11, -9};
int n = 5;


for(int step = 0; step < n-1; step++) {

  for(int i = 0; i < n; i++) {
    if(arr[i] > arr[i + 1])
       swapper(arr[i], arr[i + 1]);
  }

  for(int x = 0; x < n; x++)
      cout << arr[x] << " ";

  cout << endl;

}

1 个答案:

答案 0 :(得分:4)

修复错误

试试这个:

#include <iostream>
using namespace std;

void swapper(int &a, int &b) {
  int temp = a;
  a = b;
  b = temp;

  return;
}

int main(){

    //Bubble sort

    int arr[] = {-2, 45, 0, 11, -9};
    int n = 5;


    for(int step = 0; step < n-1; step++) {

        for(int i = 0; i+1 < n; i++) {
            if(arr[i] > arr[i + 1])
                swapper(arr[i], arr[i + 1]);
        }

        for(int x = 0; x < n; x++)
            cout << arr[x] << " ";

        cout << endl;
    }
}

我添加了一个缺失的},并将内部循环的条件更改为i+1 < n,以避免数组访问超出范围。

这是输出:

-2 0 11 -9 45 
-2 0 -9 11 45 
-2 -9 0 11 45 
-9 -2 0 11 45

对齐输出

您可以通过替换

使输出更好地对齐
cout << arr[x] << " ";

cout << setw(2) << arr[x] << " ";

并撰写

#include <iomanip>

位于文件顶部。然后输出

-2  0 11 -9 45 
-2  0 -9 11 45 
-2 -9  0 11 45 
-9 -2  0 11 45