我一直试图让代码在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();
}
感谢帮助人员。
答案 0 :(得分:2)
你有3个错误:
int* ptr
应该指向数组arr
,int* ptr = arr;
j = 8
)您需要继续排序,直到无法进行互换:
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
}
}
}