本文目录一览:
- 1、C语言 对二维数组a【5】【10】进行从大到小排序 我是新手,代码越简单越好
- 2、如何用C语言的qsort对二维数组排序?
- 3、C语言 如何对二维数组进行按列排序?
- 4、C语言程序题,根据二维数组第二个数的大小排序从小到大。
- 5、C语言:有二维数组a[N][M],用冒泡排序法对二维数组中的每一行数据进行由小到大的排序,然后输出
- 6、C语言!(二维数组统一排序)
C语言 对二维数组a【5】【10】进行从大到小排序 我是新手,代码越简单越好
#include stdio.h
int main()
{
int i,j,t,k=0,a[5][10],b[50];
for(i=0;i5;i++)
for(j=0;j10;j++)
{
scanf("%d",a[i][j]);
b[k]=a[i][j];k++;
}
for(i=0;i49;i++)
for(j=i+1;j50;j++)
if(b[i]b[j])
{t=b[i];b[i]=b[j];b[j]=t;}
k=0;
for(i=0;i5;i++)
{
for(j=0;j10;j++)
{
a[i][j]=b[k];
k++;
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
如何用C语言的qsort对二维数组排序?
建议你这样试试看:
先定义数组大小:
然后定义一个数组比较函数:
注意事项:
更安全的调用方式为qsort_s;
然后调用 qsort函数进行排序,具体逻辑如下:
代码合并如下:
这里只是根据你的数据生成了二维数组,可以根据你的具体情况进行调整;另外,关于qsort函数的用法,参考:qsort
关于比较函数的返回值,这里有一个表:
最后,以上代码的运行结果如下:
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
void sort(int a[][2],int n) {
int i,j,k,t;
for(i = 0; i n - 1; ++i) {
k = i;
for(j = i + 1; j n; ++j) {
if(a[k][1] a[j][1])
k = j;
}
if(k != i) {
for(j = 0; j 2; ++j) {
t = a[k][j];
a[k][j] = a[i][j];
a[i][j] = t;
}
}
}
}
int main() {
int a[12][2] = {1,3,3,4,0,7,3,8,15,19,15,20,10,15,8,18,6,12,5,10,4,14,2,9};
int i,j;
printf("排序前:\n");
for(i = 0; i 12; ++i) {
for(j = 0; j 2; ++j)
printf("%4d",a[i][j]);
printf("\n");
}
sort(a,12);
printf("排序后:\n");
for(i = 0; i 12; ++i) {
for(j = 0; j 2; ++j)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}
C语言:有二维数组a[N][M],用冒泡排序法对二维数组中的每一行数据进行由小到大的排序,然后输出
void px( int *a, int n ) //冒泡排序函数
{
int i,j,t;
for( i=0;in-1;i++)
for( j=0;jn-1-i;j++)
if ( a[j] a[j+1] )
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
void main()
{
int a[N][M];
int i,j;
for( i=0;iN;i++ )
{
px( a[i], M );
for( j=0;jM;j++ )
{
printf("%d ", a[i][j] );
}
printf("\n");
}
}
C语言!(二维数组统一排序)
#include stdio.h
void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/
//冒泡
{
int i,j,temp;
for(i=0;in-1;i++)
for(j=i+1;jn;j++) /*注意循环的上下限*/
if(a[i]a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
void selectsort(int *a,int n) //选择排序
{
int i,j,k,temp;
for(i=0;in-1;i++) {
k=i; /*给记号赋值*/
for(j=i+1;jn;j++)
if(a[k]a[j]) k=j; /*是k总是指向最小元素*/
if(i!=k) { /*当k!=i是才交换,否则a[i]即为最小*/
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
void quick(int *a,int i,int j) //快排
{
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2]; /*选取的参照*/
do {
while(a[m]kmj) m++; /* 从左到右找比k大的元素*/
while(a[n]kni) n--; /* 从右到左找比k小的元素*/
if(m=n) { /*若找到且满足条件,则交换*/
temp=a[m];
a[m]=a[n];
a[n]=temp;
m++;
n--;
}
}while(m=n);
if(mj) quick(a,m,j); /*运用递归*/
if(ni) quick(a,i,n);
}
void insert(int *a,int n) //插入
{
int i,j,temp;
for(i=1;in;i++) {
temp=a[i]; /*temp为要插入的元素*/
j=i-1;
while(j=0tempa[j]) { /*从a[i-1]开始找比a[i]小的数,同时把数组元素向后移*/
a[j+1]=a[j];
j--;
}
a[j+1]=temp; /*插入*/
}
}
int main()
{
int n,a[100],i,k;
printf("请输入有多少个数?\n");
scanf("%d",n);
printf("依次输入数组元素\n");
for (i=0;in;i++)
scanf("%d",a[i]);
printf("请输入1,2,3,4选择排序算法\n");
scanf("%d",k);
switch(k)
{
case 1:bubble(a,n);break;
case 2:selectsort(a,n);break;
case 3:quick(a,0,n-1);break;
default:insert(a,n);break;
}
printf("结果为\n");
for (i=0;in;i++)
printf("%d ",a[i]);
return 0;
}