Неправильно работает алгоритм сортировки

Мне нужно отсортировать таблицу по возрастанию площади прямоугольника. В функции 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-------------------------");
}

Ответы (0 шт):