You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改原data数组的前提下对C++指针数组排序?

如何排序指针数组而不修改原数据数组

你当前的问题核心是排序时修改了指针指向的原数组元素,而非调整指针数组里的指针顺序。你的SwapIntPtr函数交换的是两个指针指向的int值,这直接修改了data数组的内容,所以原数组和指针数组的输出结果完全一致——因为原数组已经被你排序了。

要实现不修改原数组的排序,你需要交换的是指针数组里的指针本身,而非它们指向的值。具体修改方案如下:

方案1:修改交换函数,实现指针交换

将SwapIntPtr改为交换两个int*类型的指针(需要用指针的指针传递,因为要修改指针变量本身):

static void SwapIntPtr(int** a, int** b)
{
    int* temp = *a;
    *a = *b;
    *b = temp;
}

然后在Sorting函数中调用时,传入指针数组元素的地址:

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]);
            }
        }
    }
}

方案2:直接在排序函数内交换指针(更简洁)

无需单独的交换函数,直接在排序循环中交换指针数组的元素:

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])
            {
                // 交换指针数组内的指针,不修改原数组内容
                int* temp = ptrarr[j];
                ptrarr[j] = ptrarr[j + 1];
                ptrarr[j + 1] = temp;
            }
        }
    }
}

效果验证

修改完成后,DisplayArray会按排序后的指针顺序输出原数组的元素值,而DisplayData输出的是原数组的原始顺序,两者结果不再一致,且原data数组的内容完全未被修改。

内容的提问来源于stack exchange,提问作者ThirstyBob321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:46:19