c语言二维数组排序
A. 关于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++)
for(j=0;j<4;j++)
{if(j<3)
{if(a[i][j]>a[i][j+1])
{t=a[i][j];a[i][j]=a[i][j+1];a[i][j+1]=t;}
if(j==3)
{if(a[i][3]>a[i+1][0])
{t=a[i][3];a[i][3]=a[i+1][0];a[i+1][0]=t;}
}
并不能起到将一行中的元素从大到小排列,若某行为6,5,1,2四数经过比较后只会得到:5,1,2,6;注意这只可以使得最后一数为最大。
而且if(j==3)
{if(a[i][3]>a[i+1][0])
{t=a[i][3];a[i][3]=a[i+1][0];a[i+1][0]=t;}
}
这行代码出现在这里也是不对的。
循环代码修改如下:int m;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{ m=0;
for(k=1;k<=3-j;k++)
if(a[i][m]<a[i][k])
{ k=m;
t=a[i][m];
a[i][m]=a[i][k];
a[i][k]=t;
}
}
这样可完成上面对每行的元素从下到大排列的目的,而行与行之间不互相比较排列。
可能你是想把全部元素从小到大排列,可利用指针来排列:
#include<stdio.h>
int main()
{
int a[3][4],*p=a[0],i,j,k,temp;
printf("please input twelve integr:")
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=1;i<12;i++) \*用冒泡法排序,每次选出最大的放到最后*\
{ k=0;
for(j=1;j<=12-i;j++)
if(*p[k]>*p[j])
{ k=j;
temp=*p[k];
*p[k]=*p[j];
*p[j]=*p[k];
}
}
printf("\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf(" %d ",a[i][j]);
}
B. C语言怎样对二维数组中每个元素进行选择排序
#include<stdio.h>
#include"stdlib.h"
#include"time.h"
intmain(intargc,char*argv[]){
inta[5][8],i,j,k,t,*p;
printf("排序前: ");
srand((unsigned)time(NULL));
for(i=0;i<5;i++){//为二维数组赋值
for(j=0;j<8;printf("%3d",a[i][j++]=rand()%100));
printf(" ");
}
printf("排序后: ");
p=(int*)a;//降为一维,这样排序简单
for(t=i=0;i<40;i++){//选择法排序
for(k=i,j=k+1;j<40;j++)
if(p[k]>p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
printf(++t%8?"%3d":"%3d ",p[i]);
}
return0;
}
C. 有关 C语言二维数组的排序,求解
#include<cstdio>
#include<algorithm>
usingnamespacestd;
intn=5,m=6;
inta[110][110];
voidprint(){
for(inti=1;i<=n;i++){
for(intj=1;j<=m;j++)
printf("%2d",a[i][j]);
putchar(' ');
}
putchar(' ');
}
intmain(){
intIdex=0;
for(inti=1;i<=n;i++)
for(intj=1;j<=m;j++)
a[i][j]=++Idex;
print();
swap(a[1],a[3]);
print();
return0;
}
运行之后的结果是这样的:
123456
789101112
131415161718
192021222324
252627282930
131415161718
789101112
123456
192021222324
252627282930
所以交换直接swap就好...[应该说的是swap两个指针]
因为可以整体交换了,所以就变成一维的排序问题了。
关于<algorithm>里面的swap()函数,您可以自行网络了解其功能。
D. c语言二维数组排序
#include<stdio.h>
int main()
{
int a[100]={12,35,36,45,88,77,99,14,123,321,
78,98,58,52,54,56,575,59,15,222,
111,222,333,444,555,666,777,888,999,101,
22,33,44,55,66,75,48,49,94,91,93,
1,2,3,4,5,6,10,7,8,9,85,86,84,46,
145,146,147,148,149,150,154,156,157,
168,665,169,167,125,123,124,126,127,
49,995,458,645,198,197,196,194,129,556,
213,214,215,219,216,228,227,225,226,
445,446,447,448,449,450,452,453};
int b[10][10];
int i,j,k,e;
for(i=0;i<100;i++)
for(j=0;j<100-i;j++)
{
if(a[j]>a[j+1])
{e=a[j];a[j]=a[j+1];a[j+1]=e;}
}
k=0;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{b[i][j]=a[k];k++;}
for(i=0;i<10;i++)
{for(j=0;j<10;j++)
printf("%-4d",b[i][j]);
printf("
");}
printf("
");
return 0;
}
是这样吧?希望能帮助你!(望采纳)
E. c语言实现二维数组排序
依次将一组中的元素进行分组判断然后按顺序打入一个相同数量元素的一维临时数组,然后先进行平均值运算后取结果再将临时数组的数据对应地放进4*5数组中,然后循环进入第二行元素,重复上述步骤。。。
F. c语言二维数组排序问题,求助各位大神
#include<stdio.h>
voidmain()
{
inti,j,temp,data[6][2]={1,3,1,0,8,3,8,1,6,0,6,2},left,right;
for(i=0;i<5;i++)
for(j=0;j<5-i;j++)
if(data[j][0]>data[j+1][0])
{
temp=data[j][0];data[j][0]=data[j+1][0];data[j+1][0]=temp;
temp=data[j][1];data[j][1]=data[j+1][1];data[j+1][1]=temp;
}
left=right=0;
while(right<=4)
{
if(data[right][0]==data[right+1][0])right++;
if(left==right){left++;right++;}
else
{
for(i=left;i<=right-1;i++)
for(j=left;j<=right-1;j++)
if(data[j][1]>data[j+1][1])
{
temp=data[j][1];
data[j][1]=data[j+1][1];
data[j+1][1]=temp;
}
right++;
left=right;
}
}
for(i=0;i<6;i++)
printf("(%d,%d)",data[i][0],data[i][1]);
}
G. C语言二维数组的排序问题
不是
这么说吧,数组名本身就是指针,指向数组的第一个元素
至于你所说的调用调用二级(二维吧)数组,难道不是如普通变量般直接调用吗?
根据问题补充说,这是不允许的,main()函数的形参是固定的不能传递指针。而一般的自定义函数只能用传递首地址的形式来传递二维数组,例子如下:
定义:int
a[x][y];
int
func(int
*p,int
x,int
y){
//x,y即为调用x行y列的元素
printf("%d\
",p+x*x+y);
//这里是通过计算指针位置实现
return
0;}
调用:
func(a,3,3);
这种通过计算地址方法调用相当麻烦。。可以考虑将数组定义在结构中,再将结构进行形参传递,当这样会降低效率...例子如下
#include<stdio.h>
typedef
struct{
int
a[5][5];}te;
te
test;
int
func(te
a,int
x,int
y){
printf("%d\
",a.a[x][y]);
return
0;}
int
main()
{
test.a[3][3]=5;
func(test,3,3);
getch();
return
0;}
H. 如何用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我
I. C语言二维数组排序问题
这里的显然是一个二维数组,二维数组可看作一维数组,
for(i = 0;i<n;i++)
{
for(j = 0; j < n; j++)
{
printf("%d",a[i][j[]);
}
}
这个就可以遍历数组的每一个元素了,相当于一维数组,