gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:43:59 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com