本文目錄一覽:
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”);
for(i=0;i3;i++){
for(j=0;j3;printf(“%2d”,x[i][j++]));
printf(“\n”);
}
for(p=(int *)x,i=0;i9;i++){//用p=(int *)x將x降為一維數組p,選擇法排序
for(k=i,j=k+1;j9;j++)
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”);
for(i=0;i3;i++){//輸出排序後的二維數組
for(j=0;j3;printf(“%2d”,x[i][j++]));
printf(“\n”);
}
return 0;
}
運行結果:
C語言怎樣對二維數組中每個元素進行選擇排序
#include stdio.h
#include “stdlib.h”
#include “time.h”
int main(int argc,char *argv[]){
int a[5][8],i,j,k,t,*p;
printf(“排序前:\n”);
srand((unsigned)time(NULL));
for(i=0;i5;i++){//為二維數組賦值
for(j=0;j8;printf(“%3d”,a[i][j++]=rand()%100));
printf(“\n”);
}
printf(“排序後:\n”);
p=(int *)a;//降為一維,這樣排序簡單
for(t=i=0;i40;i++){//選擇法排序
for(k=i,j=k+1;j40;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\n”,p[i]);
}
return 0;
}
求C語言二維數組元素排列組合?
只是0,1還好辦,要是0-9,或者更多數字就不好弄,
你這個其實跟數組是一維或者二維關係不大,3*3二維跟9個的一維,組合數結果是一樣的
這個用到綁定插入法,先將少的數字綁定,3個0,3個相對6個少點,
1.先將3個0,看成一個整體。插入到6個1中間。共7種插法,
2.2個0看成一個整體,插入,7種,在插入另外一個0,這是個這個0不能查到0的前,或者後,會跟之前的重複,6種,6*7=42種插法,
3.分開插,0不能相鄰,101010/010101整體,向剩下的111裏面查去,共2*4=8種
C語言 二位數組的排列組合問題
我下面的這個可以用於任何大小的二維數組,但有一點不好:元素不能包含0,我再改改,你看看吧:
#include stdio.h
#define ONE 4//想改變數組大小,改變這兒就行了
#define TWO 8//想改變數組大小,改變這兒就行了
int num[4];
void work(int a[ONE][TWO],int x)
{
int k;
if(x==ONE)
{
for(k=0;kx;k++)
printf(“%d\t”,num[k]);
printf(“\n”);
}
else
{
for(k=0;*(*(a+x)+k);k++)//我這兒是以0做為結束的,所以這有點局限,
{
num[x]=*(*(a+x)+k);
work(a,x+1);//遞歸實現
}
}
}
int main()
{
int a[ONE][TWO]={{1,5,8},{2,9},{3,6,4},{7,10}};//由於我是以0為判斷結束,所以裏面不能有0,我再改改
work(a,0);//調用這個函數
return 0;
}
想了一下,如果數組是字符型的就可以:char a[ONE][TWO]={{‘1′,’5′,’8’},{‘2′,’9’},{‘3′,’6′,’4’},{‘7′,’0’}};
原創文章,作者:XSRN,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/148115.html