JiaWei Lee Ответов: 1

Как рекурсивная пузырьковая сортировка x-y координата ассоциируется с x


#include <stdio.h>
#include <stdbool.h>



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)
{
    //You can adapt any of the insertion / selection / bubble sort
    
    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);
    
}

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

	//The output should match the order given in question
	for (i = 0; i < 5; i++){
		printf("(%d, %d)\n", ptArray[i].X, ptArray[i].Y);
	}

	return 0;
}


Что я уже пробовал:

как переместить Y вместе с X, когда X начнет индексирование

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



Пример Ввода-Вывода

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

	//The output should match the order given in question
	for (i = 0; i < 5; i++){
		printf("(%d, %d)\n", ptArray[i].X, ptArray[i].Y);
	}

	return 0;
}


Выход:
{5,73} , {11,19}, {11,34}, {11,68}, {13,5}

Patrice T

Покажите пример входных данных и желаемый результат.

1 Ответов

Рейтинг:
1

KarstenK

Когда вы меняетесь местами, чем вы должны поменять местами точка отверстия, не только x:

swap(Points *a, Points*b);

Сделайте некоторый вывод, чтобы понять, что происходит. Ваша реализация сортировки является неполной. Найдите какой-нибудь учебник, чтобы понять потребности вашего homewrok.