c语言二维数组排序函数 c语言二维数组如何排序

C语言 如何对二维数组进行按列排序?

无论是多少维的数组,机内都是一维的,以行优先存放。所以直接降为一维数组排序最方便省事。下面以二维数组为例写出代码——

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站建设、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的黄龙网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

#include "stdio.h"

int main(int argc,char *argv[]){

int x[3][3]={{9,4,3},{6,2,7},{5,8,1}},i,j,k,*p;

printf("Before ordering is as follows:\n");

for(i=0;i3;i++){

for(j=0;j3;printf("%2d",x[i][j++]));

printf("\n");

}

for(p=(int *)x,i=0;i9;i++){//用p=(int *)x将x降为一维数组p,选择法排序

for(k=i,j=k+1;j9;j++)

if(p[k]p[j])

k=j;

if(k!=i)

j=p[k],p[k]=p[i],p[i]=j;

}

printf("Sorted as follows:\n");

for(i=0;i3;i++){//输出排序后的二维数组

for(j=0;j3;printf("%2d",x[i][j++]));

printf("\n");

}

return 0;

}

运行结果:

c语言:定义一个 二维数组,存放五个字符串,然后用选择法按从小到大的的顺序排序并

#include stdio.h

#include string.h

#define N 5          //定义符号常量

#define MAX_LEN 100  //字符串最大长度

void selectSort(char (*pt)[MAX_LEN],int n)  //形参pt为指向二维字符数组的指针

{

int i,j,k;

char tmp[MAX_LEN];  //临时字符数组

for(i=0;in-1;i++)  //遍历所有未排序的字符串的趟数

{

k=i;  //变量k存放当前最小字符串的下标

for(j=i+1;jn;j++)               //遍历下标从(i+1)~(n-1)的所有字符串

if(strcmp(pt[k],pt[j])  0)  //字符串进行两两大小比较,如果0,则执行if语句体

k=j;                     //将当前最小的字符串的数组下标赋值给变量k

if(k != i)                       //如果k不等于i,则执行if语句体

{   //两个字符串进行交换操作

strcpy(tmp,pt[k]);

strcpy(pt[k],pt[i]);

strcpy(pt[i],tmp);

}

}

}

int main()

{

char str[N][MAX_LEN];  //定义二维字符数组

int i;

printf("输入字符串:\n");

for(i=0;iN;i++)

scanf("%s",str[i]);

selectSort(str,N);  //调用选择排序函数

printf("输出排序后的字符串:\n");

for(i=0;iN;i++)

printf("%s\n",str[i]);

return 0;

}

如何用C语言的qsort对二维数组排序?

建议你这样试试看:

先定义数组大小:

然后定义一个数组比较函数:

注意事项:

更安全的调用方式为qsort_s;

然后调用 qsort函数进行排序,具体逻辑如下:

代码合并如下:

这里只是根据你的数据生成了二维数组,可以根据你的具体情况进行调整;另外,关于qsort函数的用法,参考:qsort

关于比较函数的返回值,这里有一个表:

最后,以上代码的运行结果如下:

如何对二维数组进行排序

在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。

然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。

对二维数组按列排序后,进一步展示了如何调用快速排序函数按行进行排序。

程序源码:

#include stdio.h#include stdlib.h #define M 3#define N 3 //输出二维数组的函数void print(int a[][N]){ int i,j; for(i=0;iM;i++) { for(j=0;jN;j++) { printf("%d ",a[i][j]); } printf("\n"); } } //qsort的cmp函数int cmp(const void*a, const void *b){ return *(int*)a-*(int*)b;} int main(int argc, char* argv){ int a[M][N]={3,2,1,9,8,7,6,5,4}; printf("按列排序前的二维数组是:\n"); print(a); printf("\n"); int j; for(j=0;jN;j++)//对每一列进行升序排序 { //对第j列进行排序 int m,n; int t; for(m=M-1;m0;m--) { for(n=0;nm;n++) { if(a[n][j]a[n+1][j]) { t=a[n][j]; a[n][j]=a[n+1][j]; a[n+1][j]=t; } } } } printf("按列排序后二维数组变为:\n"); print(a); printf("\n"); //对按列排序后的二维数组按行升序排序 (调用快速排序函数) int i; for(i=0;iM;i++) { qsort(a[i],N,sizeof(a[i][0]),cmp); } printf("按列排序后再按行排序后二维数组变为:\n"); print(a); printf("\n"); system("pause"); return 0;}

编译运行后的结果如下:


网页名称:c语言二维数组排序函数 c语言二维数组如何排序
文章源于:http://hbruida.cn/article/dohpppo.html