gpt4 book ai didi

C- 对指向可以为正数或负数的整数的指针数组进行排序

转载 作者:太空狗 更新时间:2023-10-29 16:10:59 26 4
gpt4 key购买 nike

对于类,我需要生成一个包含 100 个介于最小值和最大值之间的整数的数组(现在可以正常工作),然后在一个单独的函数中,创建一个指针数组并按升序对其进行排序。

int *ptr 是指向原始数组的指针,头中SIZE定义为100

void sort(int *ptr){
int *sortAr[SIZE] = { NULL };
int i = 0, j, swap;
for (i = 0; i < SIZE; i++)
sortAr[i] = ptr[i];
for (i = 0; i < (SIZE - 1); i++)
{
for (j = 0; j < SIZE - i - 1; j++)
{
if (sortAr[j] > sortAr[j + 1])
{
swap = sortAr[j];
sortAr[j] = sortAr[j + 1];
sortAr[j + 1] = swap;
}
}
}
int z = 0;
for (z = 0; z < SIZE; z++)
printf("%d\t", sortAr[z]);
}

当原始数组中的所有整数都是正数或负数时,我使用的代码工作正常,但是当存在混合时,它将对数组进行排序以包含按升序排列的正数,然后包含所有负数升序。例如:

4       10      12      14      14      16      17      19      20      21
28 33 35 35 36 38 39 41 41 41
45 45 45 47 48 49 50 54 64 66
67 68 70 72 73 73 74 75 75 76
76 77 78 78 79 86 86 87 87 91
92 95 95 98 -100 -99 -92 -86 -86 -84
-82 -80 -78 -78 -76 -73 -73 -71 -70 -70
-69 -64 -63 -63 -58 -56 -53 -50 -49 -48
-44 -42 -36 -32 -30 -25 -24 -24 -21 -20
-20 -19 -17 -17 -10 -6 -5 -4 -3 -3

有什么想法吗?

最佳答案

你传入了一个原始的int数组,但是你把它复制成了一个int*数组。当您稍后比较它们时,您有未定义的行为,因为您不允许比较指针,除非它们属于来自单个分配的同一内存块。

实际发生的是指针在内部是unsigned,因此您的负值正在变成很大的正值。幸运的是,对于 printf 调用,该值被正确地转换回 int,因此很难看出您做了什么坏事(除非您阅读编译器的警告)。

改为像这样声明你的数组:

int sortAr[SIZE];

关于C- 对指向可以为正数或负数的整数的指针数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36414721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com