【问题标题】:Sort 2D matrix in C在C中对二维矩阵进行排序
【发布时间】:2015-01-31 18:09:30
【问题描述】:

我是 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;
}

非常感谢您的回答!

【问题讨论】:

  • 是的,如果有问题,我们也很乐意提供答案。
  • 这不是一个家庭作业回答网站。自己尝试一些事情,当你遇到困难时来这里。
  • 您无法跨 2 个维度进行排序。这没有意义。哪个优先 - 左右或上下?如果一个元素被留下但又被另一个元素保留了怎么办?它应该更小还是更大?
  • " // 排序算法放在这里"。放入其中,告诉我们您遇到问题的地方
  • 我已经尝试了好几个小时。我很清楚我如何对一维数组进行排序,但我不确定我应该如何对矩阵进行排序;就像我说的,我是 C 编程新手。事实上,最初我确实使用了一维数组,但后来我发现自己在项目的其他部分遇到了其他问题。我想一维数组毕竟是要走的路。谢谢!

标签: c matrix bubble-sort


【解决方案1】:
#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;
    }
}

【讨论】:

  • 某种整体:bubble_sort(matrix, 10*10, sizeof(**matrix), cmp_int);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 2015-09-17
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
相关资源
最近更新 更多