C语言怎样对二维数组中每个元素进行选择排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言怎样对二维数组中每个元素进行选择排序相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include "stdlib.h"
#include "time.h"
int main(int argc,char *argv[])
    int a[5][8],i,j,k,t,*p;
    printf("排序前:\\n");
    srand((unsigned)time(NULL));
    for(i=0;i<5;i++)//为二维数组赋值
        for(j=0;j<8;printf("%3d",a[i][j++]=rand()%100));
        printf("\\n");
    
    printf("排序后:\\n");
    p=(int *)a;//降为一维,这样排序简单
    for(t=i=0;i<40;i++)//选择法排序
        for(k=i,j=k+1;j<40;j++)
            if(p[k]>p[j])
                k=j;
        if(k!=i)
            j=p[k],p[k]=p[i],p[i]=j;
        printf(++t%8 ? "%3d" : "%3d\\n",p[i]);
    
    return 0;

追问

能帮我看下我的哪里错了吗

printf(++t%8 ? "%3d" : "%3d\n",p[i])这句有点看不懂

参考技术A 1)核心思想是每行按顺序排列好,假定从小到大,然后,每列从小到大排序
2)假设数组为a[i_max][j_max]
核心代码
for(i=0;i<i_max;i++)

for(j=0;j<j_max;j++)
for(k=j+1;k<j_max-1;k++)
if(a[i][k]<a[i][j])
t=a[i][j];
a[i][j]=a[i][k];
a[i][k]=t;



for(j=0;j<j_max;j++)

for(i=0;i<i_max;i++)
for(k=i+1;k<i_max-1;k++)
if(a[k][j]<a[i][j])
t=a[i][j];
a[i][j]=a[k][j];
a[k][j]=t;


望采纳追问

这方法不对啊,比如说

追答

你可以按算法走一遍,不是你给的那个

追问

你不是说先排列再排行吗

追答

先把每行排好,再把每列排好

追问

运行结果

你帮我看下我自己写的有什么错误行吗

追答

把这段程序的结果贴给我吧

一定是算法错了,你再看看吧

追问

追答

1)核心思想是每行按顺序排列好,假定从小到大,然后,每列从小到大排序
2)假设数组为a[i_max][j_max]
核心代码
for(i=0;i<i_max;i++)

for(j=0;j<j_max-1;j++)
for(k=j+1;k<j_max;k++)
if(a[i][k]<a[i][j])
t=a[i][j];
a[i][j]=a[i][k];
a[i][k]=t;



for(j=0;j<j_max;j++)

for(i=0;i<i_max-1;i++)
for(k=i+1;k<i_max;k++)
if(a[k][j]<a[i][j])
t=a[i][j];
a[i][j]=a[k][j];
a[k][j]=t;

改过了,应该能用,希望能帮到你:-)

追问

太感谢了

追答

不用谢:-)

c语言问题:c语言中二维数组在内存中怎样存储?

严格意义上说不存在二维数组,只是数组里的每个元素是一个一维数组,而内存是一段连续的空间,根据你申请一个变量的顺序按地址从低到高排,所以二维数组不可能像一个矩阵那样在内存中排列,这就涉及到它是按行依次往下排,还是按列往下排,而在c++中是按行,既 int a[2][2]
a[0][0]
a[0][1]
a[1][0]
a[1][1]
参考技术A 严格意义上说不存在二维数组,只是数组里的每个元素是一个一维数组,而内存是一段连续的空间,根据你申请一个变量的顺序按地址从低到高排,所以二维数组不可能像一个矩阵那样在内存中排列,这就涉及到它是按行依次往下排,还是按列往下排,而在c++中是按行,既 int a[2][2]
a[0][0]
a[0][1]
a[1][0]
a[1][1]
参考技术B 在C/C++中多维数组都是以行的形式连续地分布在内存中的,来个例子:

int a[2][2];
则其在内存中的表现方式为:

a[0][0], 低地址
a[0][1],
a[1][0],
a[1][1],
高地址
参考技术C 指向一维数组的指针数组。

以上是关于C语言怎样对二维数组中每个元素进行选择排序的主要内容,如果未能解决你的问题,请参考以下文章

C语言中选择排序法具体是怎样的?

如何用c语言给输入的二维数组每一行排序

sort int[][] 二维数组排序

c语言中怎样实现对二维数组元素进行赋值并输出。

数组排序是啥?

怎样用sort和qsort对二维数组排序