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[]);
}
}
這個就可以遍歷數組的每一個元素了,相當於一維數組,