编辑代码

#include <stdio.h>
#include "windows.h"

#define MaxVertex 6     // 规定矩阵最大可存多少个结点

#define INF 210000000
#define N 7

// 冒泡算法,优化版(yyq)
void bubbleSort(int matrix[], int n) {
    int x = 0;
    for (int i = 0; i < n - 1; ++i) {
        if (x == n - i) return;
        x = 0;
        for (int j = 1; j < n - i; ++j) {
            if (matrix[j - 1] > matrix[j]) {
                int tmp = matrix[j];
                matrix[j] = matrix[j - 1];
                matrix[j - 1] = tmp;
            } else x++;
        }
    }
}

// 冒泡算法,优化版(qhxg)
void bubbleSort1(int matrix[], int n) {
    for (int i = 0; i < n - 1; ++i) {
        int flag = 1;
        for (int j = 1; j < n - i; ++j) {
            if (matrix[j - 1] > matrix[j]) {
                flag = 0;
                int tmp = matrix[j];
                matrix[j] = matrix[j - 1];
                matrix[j - 1] = tmp;
            }
        }
        if (flag) return;
    }
}
// 插入算法,最基本(没优化版)
void insertSort(int arr[], int size) {
    for (int i = 1; i < size; ++i) {
        for (int j = i; j > 0; j--) {
            if (arr[j] < arr[j - 1]) {
                int tmp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = tmp;
            }
        }
    }
}

// 交换方法
void swap(int *a, int *b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

// 选择排序(优化版)
void selectSort(int arr[], int size) {
    int left = 0, right = size - 1;
    while (left < right) {
        int max = left;
        int min = right;
        for (int j = left; j <= right; ++j) {
            if (arr[min] > arr[j]) min = j;
            if (arr[max] < arr[j]) max = j;
        }
        swap(&arr[right], &arr[max]);
        // 判断 right是不是min,是的话要交换一下
        if (min == right) min = max;
        swap(&arr[left], &arr[min]);
        left++;
        right--;
    }
}

int main() {
    int matrix[N] = {4, 2, 7, 1, 5, 3, 6};

    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < N; ++j)
            printf("%d ", matrix[i][j]);
        putchar('\n');
    }
}