在 C++ 中对指针数组进行排序

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

我试图根据数组中的值对指针数组进行排序,而不保留原始数据集。但是,当我输出指针数组然后输出数据数组时,它们都具有相同的排序值。如何在不更改 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;

}
c++ arrays pointers bubble-sort
1个回答
0
投票

SwapIntPtr
交换值,而不是指针。只需使用
std::swap
或者如果您确实需要实现自己的交换:

static void SwapIntPtr(int*& a, int*& b)
{
  int* temp = a;
  a = b;
  b = temp;
}
© www.soinside.com 2019 - 2024. All rights reserved.