基于指针的冒泡用C ++排序

问题描述 投票:2回答:1

我一直试图让代码在C ++中使用基于指针的冒泡排序对用户输入的数组进行排序。代码编译时没有错误,但数组没有排序。指针从来就不是我强大的领域,我不能让它们正常工作。继承我的代码。

#include <iostream>
using namespace std;

int main()
{
    int arr[10];
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        cout << "Enter a number: ";
        cin >> arr[i];
    }

    int *ptr = &i;
    for (int j = 0; j < 9; j++)
    {
        if (*(ptr + j) > *(ptr + j + 1))
        {
            int temp = *(ptr + j);
            *(ptr + j) = *(ptr + j + 1);
            *(ptr + j + 1) = temp;
        }
    }

    cout << endl;
    for (i = 0; i < 10; i++)
        cout << arr[i] << "\t";

    cin.ignore();
    cin.get();
}

谢谢你的帮助。

c++ arrays sorting pointers
1个回答
2
投票

你有3个错误:

  1. 正如@Lukasz P.在评论中提到的那样,int* ptr应该指向数组arrint* ptr = arr;
  2. 您访问最后一个元素的界限(当j = 8时)
  3. 你需要继续排序,直到没有更多的掉期: bool sorted = false; // keep track here whether you still need to sort int *ptr = arr; while (!sorted) // repeat this until no more swaps { sorted = true; for (int j = 0; j < 8 ; j++) // Repeat until N - 1 (i.e. 8 in this case) { if (*(ptr + j ) > *(ptr + j + 1)) // make sure you don't access out of bounds { int temp = *(ptr + j); *(ptr + j) = *(ptr + j + 1); *(ptr + j + 1) = temp; sorted = false; // we swapped, so keep sorting } } }
© www.soinside.com 2019 - 2024. All rights reserved.