我试图根据数组中的值对指针数组进行排序,而不保留原始数据集。但是,当我输出指针数组然后输出数据数组时,它们都具有相同的排序值。如何在不更改 data[] 的情况下对指针数组进行排序。
我认为发生的情况是 arrptr[] 指向的值正在排序,而 data[] 数组又以某种方式被搞乱了。我尝试使用指向指针的指针,但只出现错误(int** 到 int* 转换)。
作为参考,这是我将指针数组分配给数据数组的方式。
for (int i = 0; i < size; i++)
{
ReadingFile >> num1;
data[i] = num1;
ptrarr[i] = &data[i];
}
这是输出相同精确排序结果的显示函数。
static void DisplayArray(int* ptrarr[], int size)
{
cout << "The Pointer Array of sorted pointer elements:\n";
for (int i = 0; i < size; i++)
{
cout << *ptrarr[i] << " "; //gives same result as DisplayData
}
cout << endl;
return;
}
static void DisplayData(int data[], int size)
{
cout << "Data Array elements are:\n";
for (int i = 0; i < size; i++)
{
cout << data[i] << " ";
}
cout << endl;
return;
}
这是我的排序功能。我很难看到这个问题,因为一切看起来都应该有效。然而,我希望有一双新的眼睛可以帮助我看到这个问题。
static void SwapIntPtr(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
return;
}
static void Sorting(int* ptrarr[], int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size - i - 1; j++)
{
if (*ptrarr[j] > *ptrarr[j + 1])
{
SwapIntPtr(ptrarr[j], ptrarr[j + 1]);
}
}
}
return;
}
SwapIntPtr
交换值,而不是指针。只需使用 std::swap
或者如果您确实需要实现自己的交换:
static void SwapIntPtr(int*& a, int*& b)
{
int* temp = a;
a = b;
b = temp;
}