c - 在 C 中对二维矩阵进行排序

标签 c matrix bubble-sort

我是 C 编程新手,只有一个问题我似乎无法自己解决。

我创建了一个二维矩阵,需要使用冒泡排序对矩阵中所有 100 个随机生成的数字进行排序。我还需要保存输出以供以后在我的程序中使用。有人知道吗?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int i, j, matrix[10][10];

    // Generate random numbers in a matrix
    printf("Numbers generated:\n");
    srand((int)time(NULL));
    for(i=0; i<10; i++) {
        for(j=0; j<9; j++) {
            matrix[i][j] = (rand()%900) + 100;
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    // Sort matrix
    for(i=0; i<10; i++) {
        for(j=0; j<10; j++) {
            // Sort algorithm goes here
        }
    }
    // Present sorted matrix
    printf("\nSorted matrix:\n");
    for(i=0; i<10; i++) {
        for(j=0; j<9; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

如果您能得到答复,我将不胜感激!

最佳答案

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

void bubble_sort(void *base, size_t n, size_t size,
                 int (*cmp)(const void*, const void *));

int cmp_int(const void *a, const void *b){
    int x = *(const int *)a;
    int y = *(const int *)b;
    return x < y ? -1 : x > y;
}

int main() {
    int i, j, matrix[10][10];

    // Generate random numbers in a matrix
    printf("Numbers generated:\n");
    srand((unsigned)time(NULL));
    for(i=0; i<10; i++) {
        for(j=0; j<10; j++) {
            matrix[i][j] = rand()%900 + 100;
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    // Sort matrix
    for(i=0; i<10; i++) {
        bubble_sort(matrix[i], 10, sizeof(**matrix), cmp_int);//sort column of row
    }
    bubble_sort(matrix, 10, sizeof(*matrix), cmp_int);//sort row by 1st column.
    // Present sorted matrix
    printf("\nSorted matrix:\n");
    for(i=0; i<10; i++) {
        for(j=0; j<10; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

void swap(void *a, void *b, size_t size){
    void *temp = malloc(size);
    memcpy(temp, a   , size);
    memcpy(a   , b   , size);
    memcpy(b   , temp, size);
    free(temp);
}

void bubble_sort(void *base, size_t n, size_t size, int(*cmp)(const void*, const void *)){
    for(; n>0; --n){
        int i, swaped = 0;
        for(i=0; i<n-1; ++i){
            void *a = (char*)base + i*size;
            void *b = (char*)base + (i+1)*size;
            if(cmp(a, b)>0){
                swap(a, b, size);
                swaped = 1;
            }
        }
        if(!swaped)
            break;
    }
}

关于c - 在 C 中对二维矩阵进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27267326/

相关文章:

c# - Windows 窗体 : change dataGridView's first cell origin?

c++ - 排序给出最后位置元素的错误输出

c# - 如何在 C# 中创建通用冒泡排序

c - 如何在C中的冒泡排序函数中保留while循环

c - 返回未知 int 类型的范围

c - 为什么我无法读取服务器文件中的多个字符串?

go - 如何创建字节矩阵Golang

python - Numpy 图像 - 将矩阵旋转 270 度

c - 互斥体到只读变量

c - fscanf 读取 7 行中的 1 行错误