c语言对多维数组排序函数,c语言二维数组排序的程序

求C语言关于多维数组的详细讲解,急!!!

一维的可以理解为行形式

成都创新互联是一家专注网站建设、网络营销策划、小程序开发、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十多年以来,已经为近千家食品包装袋各业的企业公司提供互联网服务。现在,服务的近千家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。

二维的是行列式

三维的可以这样理解

每一个[]代表一个方向 当然三维以上的数组不太容易用实体模式想像 但大概方式是一样的

先搞明白1 2 3维对应于下标的方式 指针 地址的对应关系

比如对于int a[2][3][4]而言

a[1]  a[1][1] a[1][1][1] a[1][1][3] a[1][2][0]

搞清以上几项的地址关系

组数基本我们可以按行读来理解[具体对应于代码]

即 1维 从左向右读

2维 a[2][3] 从左向右工a[][0]~a[][2] 3格 成为一行 每一行对应一个a[]

三维a[4][2][3]的在此基础上增加到4个层面 (原来的2维对应为2*3格的一个面)

C语言编写函数,数组排序

void Swap(int *a, int *b)

{

int tmp = *a;

*a = *b;

*b = tmp;

}

void Selectsort(int *arr, int sz)

{for (int end=sz-1; end=0; end--)

{

int max = end;

int i;

for ( i = 0; i = end; i++)//选出最大下标

{

if (arr[i] arr[max])

{

max = i;

}

}

Swap(arr, arr[max]);

}

}

int main()

{

int arr[5] = { 1, 3, 2, 5, 4 };

int sz = sizeof(arr) / sizeof(arr[0]);

for (int i = 0; i = sz - 1; i++)

{

scanf("%d", arr[i]);

}

Selectsort(arr, sz);

for (int i = 0; i = sz - 1; i++)

{

printf("%d ", arr[i]);

}

system("pause");

return 0;

}

扩展资料:

printf函数使用注意事项

1、域宽

%d:按整型数据的实际长度输出。

如果想输出指定宽度可以指定域宽,%md--gt;m域宽,打印出来以后,在控制台上,显示m位;

如果要打印的数的位数如果超过我们设定m则原样输出;

如果要打印的数的位数如果小于设定的位数,则补空白,具体如下:

如果m为正数,则左对齐(左侧补空白);

如果m为负数,则右对齐(右侧补空白)。

2、转义字符

如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示。

如:printf("%f%%",1.0/3);输出结果:0.333333%。

C语言中怎样把一个多维数组排序?

同意一楼方法,讲二维数组存到一维数组中,然后用qsort排序,再存到二维数组当中

代码敲了一下,发现C语言快忘光了

#include stdio.h

#include stdlib.h

int comp(const void *a , const void *b){

return *(int *)b - *(int *)a; //这是b-a,如果是a-b就是从小到大排序

}

int main(){

int a[3][3];

int b[9];

int n;

int i , j , k;

for(i = 0 , k = 0; i 3 ; i ++)

for(j = 0 ; j 3 ; j ++){

scanf("%d",a[i][j]);

b[k++] = a[i][j]; // k ++别看漏

}

qsort(b,9,sizeof(int),comp);//qsort函数很简单的,看看就会,不怕麻烦,comp函数是指定排序是从小到大还是从大到小

for(i = 0 , k = 0; i 3 ; i ++)

for(j = 0 ; j 3 ; j ++){

a[i][j] = b[k++];

printf("%d",a[i][j]);

}

system("pause");

return 0;

}

qsort看不懂再给你个百科的链接

自己再敲一次吧,代码是敲出来的,多练练

ps:那个int n是多余的,你的代码测试了,可以

怎么用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语言程序设计(12)

第一处填空,是个三重循环:

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

for(j=0;jN+1;j++)

for(k=j+1;kN;k++)

这里,i是数组的行标号,第一重循环表示依次对N行数组分别排序

然后j和k是列下标,一个二重循环排序的过程,其原理如下:

比如2 3 5 1 0 按从小到大排序

首先,j=0 k=1~4,就是数字2分别与3 5 1 0比较,把小的放到2的位置来

一轮之后,就变成 0 3 5 2 1

第二轮,j=1 k=2~4 ,就是数字3分别与5 2 1比较,把最小的放到3的位置

就是依次找出最小的放在最前,找出第二小的,放第二个位置……

依次这样循环到最后,就能完成排序

第二个填空,是要完成“第0行从小到大排序,第1行从大到小排序,第2行从小到大排序,第3行从大到小排序”这样的功能,这样填:

if(i%2==1?a[i][j]a[i][k]:a[i][j]a[i][k])

表示,如果i%2==1(即i是奇数行标),则采用a[i][j]a[i][k]这个判断条件,否则就采用a[i][j]a[i][k]这个判断条件

这样就能实现偶行从小到大排序,奇行从大到小排序咯

=============================================

1

outarr(aa);

这样是把数组的地址当作实参传递过去,而,形参是这样

void outarr(int a[N][N])

这说明白形参是接受的数组的值啊???

这是怎么回事?

这里不是按地址传递,定义void outarr(int a[N][N])表示的是按数组整个传递,并且数组做为参数传递有个特点,就是一定是按引用传递

知道什么是按引用传递吗?简单理解,就是在函数里面,对该参数的修改,会影响主函数中该参数的值

====================================================

2

在主函数中

数组的定义是这样的

int aa[N][N]

表示未知行和列

但初始化又是这样

int aa[N][N]={{2,3,4,1},{8,6,5,7},{11,12,10,9},{15,14,16,13}};

这样能算对吗?

这里数组的定义不是未知行和列

我们语庋规则规定,数组定义,必须用明确定义行列的数目

其实这里的N不是一个变量,而已经变成一个数字了,看上面的定义:

#define N 4

这一句定义,等于告诉编译器,每逢碰到N,就把它换成4的意思

那么其实数组定义就是int aa[4][4]

=====================================================

3

第一个被调函数

void sort(int a[][N])

它里面省略的行,我知道,二维数组可以这么写,但,在这个被调函数中,要使用到行数啊,它不给出,后面,怎么计算呢?

这个程序中,行数N在前面已经定义了

在整个程序的过程中,N不是一个变量,而是表示数字4!!


网站题目:c语言对多维数组排序函数,c语言二维数组排序的程序
URL分享:http://hbruida.cn/article/hedddj.html