本文目录一览:
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'}};