c语言关于二维数组排序的问题菜鸟提问
你的循环写的有问题,
从第二个开始两两相比,大的往下,
然后第三个开始两两相比大的往下,
这样不会是从小到大,
应该是反过来,从后往前
for (int j = i+1; j < str; j++)
{
int r = strcmp(n[j], n[j+1]);
你第一个就跳过了连比较也不比?
这里的显然是一个二维数组,二维数组可看作一维数组,
for(i = 0;i<n;i++)
{
for(j = 0; j < n; j++)
{
printf("%d",a[i][j[]);
}
}
这个就可以遍历数组的每一个元素了,相当于一维数组,
还有你是要把这些数据处理成输出的结果的那种形式,还是要针对所有的二维数组?
提问的时候最好先想好如何表述,这样才能让大家更好的帮组你。
只是个人的建议。
#include<stdio.h>
#define N 4
int main()
{
int a[N][N]={4,5,2,3,8,5,4,7,9,6,6,5,5,7,3,4};
int i,j;
for(i=0;i<N/2;i++)
{
for(j=0;j<N;j++)/* 从第一行开始输出;*/
printf("%d ",a[i][j]);
printf("\n");/* 输出一行,再输出一个换行符;*/
for(j=0;j<N;j++)/* 输出从最后一行开始数起,对应上面输出的一行;*/
printf("%d ",a[N-i-1][j]);
printf("\n");
}
return 0;
}
这是我看题目以后理解的意思,不知道与你的意思是否吻合。不适合的话,再补充说明一下吧。
#include "stdio.h"
void main()
{
int a[4][4]={4,5,2,3,8,5,4,7,9,6,6,5,5,7,3,4};
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++) {
printf("\t\t%d",a[i][j]);
if(j==3) printf("\n");
}
printf("\n\t\t");
}
我猜你的想法是按二维数组的行首元素值大小排序输出:
#include<stdio.h>
#define N 4
void main() //2维数组排序
{
int a[N][N]={4,5,2,3,8,5,4,7,9,6,6,5,5,7,3,4},i,j,k,temp;
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(*(*(a+i)+0)>*(*(a+j)+0))
for(k=0;k<N;k++)
{temp=*(*(a+i)+k);*(*(a+i)+k)=*(*(a+j)+k);*(*(a+j)+k)=temp;}
for(i=0;i<4;i++)
for(j=0;j<4;j++) {
printf("%d ",a[i][j]);
if(j==3) printf("\n");
}
printf("\n");
}
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");...
c语言中二维数组哪个是行,哪个是列
1、二维数组的第一个参数是行,第二个参数是列。二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2],其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。2、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、...
C语言|二维数组的定义、初始化、赋值
在C语言中,二维数组是按行排列的。也就是说,先存放a[0]行,然后是a[1]行,最后是a[2]行;每行中的4个元素也是依次存放。数组a为int类型,每个元素占用4个字节,整个数组共占用4×(3×4)=48个字节。可以这样认为,二维数组是由多个长度相同的一维数组构成的。【实例1】一个学习小组有5个人...
二维数组在内存中的存放顺序
在c语言里二维数组元素在内存中是按行存放的。二维数组A[m][n],这是一个m行,n列的二维数组。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。
C语言 对二维数组a【5】【10】进行从大到小排序 我是新手,代码越简单越 ...
include <stdio.h>int main(){int i,j,t,k=0,a[5][10],b[50];for(i=0;i<5;i++)for(j=0;j<10;j++){scanf("%d",&a[i][j]);b[k]=a[i][j];k++;}for(i=0;i<49;i++)for(j=i+1;j<50;j++)if(b[i]
在C语言中,二维数组元素在内存中的存放顺序是 A按行存放 B按列存放 C...
但是,实际的硬件存储器却是连续编址的, 也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。例如:float a[3][4...
C语言精髓2(二维数组)
今天我们将深入探讨C语言的二维数组,主要涉及以下操作:1. 计算二维数组所有元素的和与平均值:初始化求和变量sum为0,遍历数组元素累加。2. 对角线元素求和:区分正对角线(行下标等于列下标)和反对角线(行下表加列下标等于最大下标)。3. 求每行和每列元素之和:分别按行和列累加数组元素。4. ...
C语言二维数组生成以下形式数组 1 2 4 7 3 5 8 11 6 9 12 14 10 13...
int main(){ int arry[16] = {1,2,4,7,3,5,8,11,6,9,12,14,10,13,15,16};int temp;\/\/选择排序法 for (int i=0; i<15; i++){ for (int j=i+1; j<16; j++){ if (arry[i] > arry[j]){ temp = arry[i];arry[i] = arry[j];arry[j] = temp;} } } \/...
关于c语言 二维数组排列大小的问题
如果没看错的话,你写的代码是把二维数组每行元素按从小到大排列,而行与行之间不会进行比较,如果这是你的想法,我帮你把代码改下:第四行笔误:for(j=0;j<3;j++)改成for(j=0;j<3;j++)。第五行for(k=0;k<12;k++0 应是多余的吧,后面没用到k。循环语句{for(i=0;i<3;i++)fo...
c语言 二维数组每行的从小到大排列
void main(){ int a[3][4],i,j,t,m,x;printf("输入一3×4二维整型数组:\\n");for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",*(a+i)+j);for(x=1;x<5;x++)for(i=0;i<3;i++){ for(t=0;t<3;t++)if(*(*(a+i)+t+1)<*(*(a+i)+t)){ m=*(*(a...
移斧干复:for(i=0;i<32;i++) {for(j=i+1;j<32;j++){if(sort[i][1]>sort[j][1]){for(int k=0;k<12;k++)//十二个数分别交换{t=sort[j][k];a[j][k]=a[i][k];a[i][k]=t;}}} }
红旗区18892578169: 如何用c语言给输入的二维数组每一行排序 - ?
移斧干复: 可以用stdlib.h中的qsort函数 如果是int a[10][10]的话 排序第i行 qsort(a[i],10,sizeof(int),comp); 就可以了,comp是一个比较函数 int comp(const void *m1, const void *m2){ return *(int*)m1-*(int*)m2; } 这样就可以排序了,如果要反序,就将comp中的m1和m2互换,可以试试,如果不对可以Hi我
红旗区18892578169: C语言二维数组的排序问题 - ?
移斧干复: 不是 这么说吧,数组名本身就是指针,指向数组的第一个元素 至于你所说的调用调用二级(二维吧)数组,难道不是如普通变量般直接调用吗? 根据问题补充说,这是不允许的,main()函数的形参是固定的不能传递指针.而一般的自定义函...
红旗区18892578169: c语言二维数组的冒泡排序 - ?
移斧干复: p=&a[0][0 ]指针指向第一个元素地址 p[1] < p[0] 如果这个数前面的数大于这个数
红旗区18892578169: c语言,二维数组排序 - ?
移斧干复: 别分行列了,都放在一起,用冒泡排序,二维数组跟一位数组,在你这种情况下,区别不大
红旗区18892578169: 如何用C语言的qsort对二维数组排序? - ?
移斧干复: 建议你这样试试看:先定义数组大小:然后定义一个数组比较函数:注意事项:更安全的调用方式为qsort_s;然后调用 qsort函数进行排序,具体逻辑如下:代码合并如下:这里只是根据你的数据生成了二维数组,可以根据你的具体情况进行调整;另外,关于qsort函数的用法,参考:qsort 关于比较函数的返回值,这里有一个表:最后,以上代码的运行结果如下:
红旗区18892578169: C语言!(二维数组统一排序) - ?
移斧干复: #includevoid bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/ //冒泡 { int i,j,temp; for(i=0;ia[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } void selectsort(int *a,int n) //选择排序 { int i,j,k,temp; for(i=0;ia[j]) k=j; /*是k总是指向最小元素*/ if(i!=k) { /*...
红旗区18892578169: 求教c语言二维数组的冒泡排序法? - ?
移斧干复: 1、打开Visual Studio工具并创建一个新的Win32程序. 2、在打开的C语言文件中,导入stdio.h空间,然后准备一个main函数. 3、接下来,准备一个需要进行冒泡排序的整数数组.如下图所示,数组中数字的顺序是不正常的. 4、接下来,准备变量,准备好的变量用于对交互数据进行排序. 5、然后我们准备两个for循环数组,我们需要注意外循环和内循环.
红旗区18892578169: C语言编程求解,二维数组矩阵,按降序排列,输入矩阵?? - ?
移斧干复: 我写程序时候缩排的格式没了,可能程序看起来有些乱,抱歉了! #include <stdio.h> #define LEN 5 void main() {int i,j,t,k;float min,sum,temp;float arr[LEN][LEN]={{12,23,43,45},{13,43,53,67},{19,57,49,26},{25,65,87,14},{15,56,85,72}};//如果...
红旗区18892578169: C语言二维数组冒泡排序 - ?
移斧干复: 改好了,试试#include<stdio.h> int main() { int a[3][5]={{23,5,71,10,4},{39,23,7,85,-9},{36,12,52,-8,47}}; printf("输入数组:\n"); int i,j,k,s,d; for(i=0;i<3;i++) for(j=0;j<5;j++) { for(s=j;s<5;s++) { if(a[i][j]>a[i][s]) { k=a[i][s]; a[i][s]=a[i][j]; a[i][j]=k; } } } for(i=...