我想对与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;
}
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
完整的工作代码 -
struct point{
int x; int y;
};
bool isGreater(point p1, point p2){
if(p1.x>p2.x) return true;
else if(p1.x==p2.x){
return p1.y>p2.y;
}
return false;
}
void recBubble(point *arr, int n){
if (n == 1) return;
for (int i=0; i<n-1; i++)
if (isGreater(arr[i],arr[i+1]))
swap(arr[i], arr[i+1]);
recBubble(arr, n-1);
}