网站首页 > 文章中心 > 其它

c语言对多维数组排序函数

作者:小编 更新时间:2023-08-21 08:34:29 浏览量:235人看过

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

一维的可以理解为行形式

二维的是行列式

三维的可以这样理解

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

搞清以上几项的地址关系

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

即 1维 从左向右读

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 sz = sizeof(arr) / sizeof(arr[0]);

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

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

Selectsort(arr, sz);

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

system("pause");

return 0;

扩展资料:

printf函数使用注意事项

①.、域宽

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

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

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

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

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

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

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

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 n;

int i , j , k;

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

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

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

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

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

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

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

怎么用C语言解决多维数组的排序问题

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

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

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

#include?"stdio.h"

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

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

printf("\n");

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");

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是列下标,一个二重循环排序的过程,其原理如下:

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

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

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

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

outarr(aa);

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

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

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

这是怎么回事?

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

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

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

在主函数中

数组的定义是这样的

int aa[N][N]

表示未知行和列

但初始化又是这样

这样能算对吗?

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

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

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

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

第一个被调函数

void sort(int a[][N])

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

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

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章