Неправильно работает алгоритм сортировки
Мне нужно отсортировать таблицу по возрастанию площади прямоугольника. В функции Sort() у меня алгоритм сортирования методом "пузырька", но сортируется массив неправильно, не могу понять, в чем ошибка(
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX 10
typedef struct
{
int number;
double x1, y1;
double x2, y2;
double sq;
}coord;
coord rectang[MAX];
int Enter(coord*, int);
void Print(coord*, int);
void Inside(coord*, int);
void Sort(coord*, int);
void main(void) {
system("chcp 1251");
int size; //фактична кількість елементів масиву
size = Enter(rectang, MAX);
Print(rectang, size);
Square(rectang, size);
Sort(rectang, size);
getchar();
}
int Enter(coord* ar, int k) {
int m = 0; //m - номер прямокутника
char end[5];
printf(" 0 - завершити введення\n");
for (m; m < k; m++) {
ar[m].number = m + 1;
printf(" Прямокутник №%d\n", ar[m].number);
printf(" Введіть координати верхньої лівої вершини:\n x1: ");
scanf_s("%lf", &ar[m].x1);
printf(" y1: ");
scanf_s("%lf", &ar[m].y1);
printf(" Введіть координати нижньої правої вершини:\n x2: ");
scanf_s("%lf", &ar[m].x2);
printf(" y2: ");
scanf_s("%lf", &ar[m].y2);
rewind(stdin);
gets_s(end);
if (*end == '0')
break;
}
return m;
}
void Print(coord* ar, int k) {
int m = 0;
printf("\n\t Таблиця введених даних:");
printf("\n\t------------------------------------------------------------- ------");
printf("\n\t| № | ");
printf(" x1 | ");
printf(" y1 | ");
printf(" x2 | ");
printf(" y2 |");
for (m; m <= k; m++) {
printf("\n\t-------------------------------------------------------------------");
printf("\n\t| %d. | ", ar[m].number);
printf(" %-9.2lf| ", ar[m].x1);
printf(" %-9.2lf| ", ar[m].y1);
printf(" %-9.2lf| ", ar[m].x2);
printf(" %-9.2lf|", ar[m].y2);
}
printf("\n\t-------------------------------------------------------------------");
}
void Square(coord* ar, int k) {
int m = 0;
double a, b;
for (m; m <= k; m++) {
a = ar[m].x2 - ar[m].x1;
b = ar[m].y1 - ar[m].y2;
ar[m].sq = a * b;
}
}
void Sort(coord* ar, int k) {
int m = 0, i = 0;
for (m; m < k; m++)
for (i; i < k - m; i++) {
if (ar[i].sq > ar[i + 1].sq) {
double t = ar[i].sq;
ar[i].sq = ar[i + 1].sq;
ar[i + 1].sq = t;
int t1 = ar[i].number;
ar[i].number = ar[i + 1].number;
ar[i + 1].number = t1;
}
}
printf("\n\n\t Таблиця відсортованих даних:");
printf("\n\t-------------------------");
printf("\n\t| № | ");
printf(" S |");
for (i = 0; i <= k; i++) { // виводимо таблицю
printf("\n\t-------------------------");
printf("\n\t| %d. | ", ar[i].number);
printf(" %-9.2lf| ", ar[i].sq);
}
printf("\n\t-------------------------");
}