数组是
array = [[1],[2],[3],[0],[1,2],[1,0],[0,1]]
希望排序整个数组,先按照数组 元素个数 ,如果个数相同再 按照首个元素大小 。
array.sort_by {|a| [a.size, a[0]] }
#include#include
#define M 3
#define N 3
//输出二维数组的函数
void print(int a[][N])
{
int i,j
for(i=0i<Mi++)
{
for(j=0j<Nj++)
{
printf("%d ",a[i][j])
}
printf("\n")
}
}
//qsort的cmp函数
int cmp(const void*a, const void *b)
{
return *(int*)a-*(int*)b
}
int main(int argc, char* argv)
{
int a[M][N]={3,2,1,9,8,7,6,5,4}
printf("按列排序前的二维数组是:\n")
print(a)
printf("\n")
int j
for(j=0j<Nj++)//对每一列进行升序排序
{
//对第j列进行排序
int m,n
int t
for(m=M-1m>0m--)
{
for(n=0n<mn++)
{
if(a[n][j]>a[n+1][j])
{
t=a[n][j]
a[n][j]=a[n+1][j]
a[n+1][j]=t
}
}
}
}
printf("按列排序后二维数组变为:\n")
print(a)
printf("\n")
//对按列排序后的二维数组按行升序排序 (调用快速排序函数)
int i
for(i=0i<Mi++)
{
qsort(a[i],N,sizeof(a[i][0]),cmp)
}
printf("按列排序后再按行排序后二维数组变为:\n")
print(a)
printf("\n")
system("pause")
return 0
}
这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真, 如果为真则继续循环;如果为假, 则终止循环。因此, do-while循环至少要执行一次循环语句。