怎么对一个二维数组按先行后列进行升序排列

ekisstherain 2009-09-24 11:04:10
如题,我不是很明白这句话,谁知道的可不可以用一个二维数组举一个例说明下?
谢谢啦...
...全文
742 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ekisstherain 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 anni_song 的回复:]
先行后列:
a[][]= a[][]= a[][]=
{ { {
4 2 3 (先行) 2 3 4 (后列) 1 3 4
5 9 1 ---- 1 5 9 ---- 2 5 8
3 8 6 3 6 8 3 6 9
} } }

先列后行就有区别了
排后是:
a[][]=
{
1 2 3
3 4 8
5 6 9
}


可以用两个循环结构对行排序得到b[][],用同样的方法对列排序得到c[][]
C的基础性知识要熟透呀
[/Quote]
我也是这样认为的,谢谢啦
dennis_xus 2009-09-25
  • 打赏
  • 举报
回复
先行后列:
a[][]= a[][]= a[][]=
{ { {
4 2 3 (先行) 2 3 4 (后列) 1 3 4
5 9 1 ---- 1 5 9 ---- 2 5 8
3 8 6 3 6 8 3 6 9
} } }

先列后行就有区别了
排后是:
a[][]=
{
1 2 3
3 4 8
5 6 9
}


可以用两个循环结构对行排序得到b[][],用同样的方法对列排序得到c[][]
C的基础性知识要熟透呀
星羽 2009-09-25
  • 打赏
  • 举报
回复
a[][]=
{
4 2 8
5 9 0
7 6 2
}

应该排完后是

a[][]=
{
0 2 2
4 5 6
7 8 9
}
cxjddd 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ekisstherain 的回复:]
题目就一句话:对给定的一个二维数组a[4][4]按先行后列的次序进行升序排列.
我就是不明白应该怎么排才对,比如
a[][]=
{
  4 2 8
  5 9 0
  7 6 2
}
这样的数组按先行后列排,哪么按先列后行排有没有区别呢??
谁可以解释下...
[/Quote]
是否要排成:
0 2 2
4 5 6
7 8 9
抑或:
0 4 7
2 5 8
2 6 9
ekisstherain 2009-09-25
  • 打赏
  • 举报
回复
题目就一句话:对给定的一个二维数组a[4][4]按先行后列的次序进行升序排列.
我就是不明白应该怎么排才对,比如
a[][]=
{
4 2 8
5 9 0
7 6 2
}
这样的数组按先行后列排,哪么按先列后行排有没有区别呢??
谁可以解释下...
赵4老师 2009-09-25
  • 打赏
  • 举报
回复
我个人认为:
先行后列排序
不是先按行排序然后再按列排序的意思
而是按每行的第1列元素的值将该行的行位置排序,如果两行第1列相同,则看第2列的值,依此类推。
比如
7,8,4
1,3,2
7,8,9
9,5,6
7,9,4
7,8,4
按先行后列升序排序后应为
1,3,2
7,8,4
7,8,4
7,8,9
7,9,4
9,5,6
lstok2009 2009-09-25
  • 打赏
  • 举报
回复
还没注释!也没什么好注释!我采用的是冒泡排序!
lstok2009 2009-09-25
  • 打赏
  • 举报
回复
自己编的,很粗糙!
#include <stdio.h>
#include <stdlib.h>
main()
{
int a[3][3],i,j,k,temp;

for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\n\n");
for(i=0;i<3;i++)
for(j=0;j<2;j++)
for(k=0;k<(2-j);k++)
if (a[i][k]>a[i][k+1])
{
temp=a[i][k];
a[i][k]=a[i][k+1];
a[i][k+1]=temp;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\n\n");


for(i=0;i<3;i++)
for(j=0;j<2;j++)
for(k=0;k<(2-j);k++)
if (a[k][i]>a[k+1][i])
{
temp=a[k][i];
a[k][i]=a[k+1][i];
a[k+1][i]=temp;
}





for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
printf("\n");
}
system("pause");

}
wendll 2009-09-25
  • 打赏
  • 举报
回复
上面忘了贴格式了!
#include <stdio.h>

void PrintArray(int Arr[],int n)
{
for(int i=0;i<n;i++)
printf("%d ",Arr[i]);
printf("\n");
}

//插入排序
template<class type>
void InsertSort(type *Arr,int n)
{
int j,p;
type tmp;
for(p=1;p<n;p++)
{
tmp=Arr[p];
for(j=p-1;j>=0&&Arr[j]>tmp;j--)
Arr[j+1]=Arr[j];
Arr[j+1]=tmp;
}
}


void main()
{
const int N = 3;
const int M = 3 ;
int a[N][M] = {1,3,2,9,5,6,7,8,4} ;

int i,j;

//先行排
for(i=0; i<N; i++)
{
InsertSort(*(a+i), M) ;

}

//列排,列序排谁有更好的方法告诉我
for(i=0; i<M; i++)
{
int p,tmp ;
for(p=1;p<N;p++)
{
tmp=a[p][i];
for(j=p-1;j>=0&&a[j][i]>tmp;j--)
a[j+1][i]=a[j][i];
a[j+1][i]=tmp;
}

}


for(i=0; i<N; i++)
{
PrintArray(*(a+i), M) ;
}


}

wendll 2009-09-25
  • 打赏
  • 举报
回复
刚回了个插入排序的贴子,现在借用插入排序的代码做下这个题
#include <stdio.h>

void PrintArray(int Arr[],int n)
{
for(int i=0;i<n;i++)
printf("%d ",Arr[i]);
printf("\n");
}

//插入排序
template<class type>
void InsertSort(type *Arr,int n)
{
int j,p;
type tmp;
for(p=1;p<n;p++)
{
tmp=Arr[p];
for(j=p-1;j>=0&&Arr[j]>tmp;j--)
Arr[j+1]=Arr[j];
Arr[j+1]=tmp;
}
}


void main()
{
const int N = 3;
const int M = 3 ;
int a[N][M] = {1,3,2,9,5,6,7,8,4} ;

int i,j;

//先行排
for(i=0; i<N; i++)
{
InsertSort(*(a+i), M) ;

}

//列排,列序排谁有更好的方法告诉我
for(i=0; i<M; i++)
{
int p,tmp ;
for(p=1;p<N;p++)
{
tmp=a[p][i];
for(j=p-1;j>=0&&a[j][i]>tmp;j--)
a[j+1][i]=a[j][i];
a[j+1][i]=tmp;
}

}


for(i=0; i<N; i++)
{
PrintArray(*(a+i), M) ;
}


}

selooloo 2009-09-25
  • 打赏
  • 举报
回复
int a[3][3] = {
1,3,2
9,5,6
7,8,4
}

先按行排序 {
1,2,3
5,6,9
4,7,8
}
再按列排序 {
1,2,3
4,6,8
5,7,9
}
zhui1988 2009-09-25
  • 打赏
  • 举报
回复
up
wendll 2009-09-25
  • 打赏
  • 举报
回复
二维数组如下

int a[3][3] = {
1,2,3
4,5,6
7,8,9
}

题目你解释下,先行后列是啥东西?
意思是对二维数组的每以维进行排序呢?

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧