gpt4 book ai didi

c - C中X-Y坐标的递归冒泡排序

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:01 25 4
gpt4 key购买 nike

我想对与X关联的元素进行排序

该方法没有以递归的方式尝试,不知道该怎么做

预期的输出是:{5,73}、{11,19}、{11,34}、{11,68}、{13,5}

到目前为止我已经试过了,但是只有 X 被排序而 Y 保持在原来的位置

void sort(struct Points a[], int n)
{

if (n == 1) return;

for (int i=0; i<n-1; i++)
if (a[i].X > a[i+1].X)
swap(&a[i].X, &a[i+1].X);

//sort(&a[0], n);

}
struct Points {
int X, Y;
};

void swap(int *a, int *b)
{
int t;

t = *b;
*b = *a;
*a = t;
}


void sort(struct Points a[], int n);

int main()
{
int i;
struct Points ptArray[5] = { {11, 34}, {5, 73}, {11, 19}, {13, 5}, {11,
68}};

sort(ptArray, 5);


for (i = 0; i < 5; i++){
printf("(%d, %d)\n", ptArray[i].X, ptArray[i].Y);
}

return 0;
}

最佳答案

您的代码中存在一些问题:

[1] 你想交换 Points 对象所以修改 swap 函数看起来

void swap(Points *a, Points *b)
{
Points t;

t = *b;
*b = *a;
*a = t;
}

[2] 现在您仅通过检查 X 坐标对元素进行排序,您没有条件检查 Y - 值

[3]递归调用sort函数时,n参数必须在调用函数前递减

sort 函数应该是

void sort(struct Points a[], int n)
{
if (n > 1)
{
for (int i=0; i<n-1; i++)
if (a[i].X > a[i+1].X || (a[i].X == a[i+1].X && a[i].Y > a[i+1].Y))
swap(&a[i], &a[i+1]);
sort (a,--n);
}
}

关于c - C中X-Y坐标的递归冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48880747/

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