C语言程序中对多维数组中以某一维数据进行排序的一种方法

首先参考一个来自网络的关于一维数组排序的例程:
#include<stdio.h>
void main()
{
int a[10] = { 10,2,3,4,5,6,9,8,7,1 };
int i,j,t;
for(j=0;j<10;j++) 
for(i=0;i<10-1-j;i++)
if(a[i]>a[i+1]) /* 由小到大,由大到小时改为< */
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
这个程序利用冒泡法实现了对一维数组的排序,但是我们有时会需要对二维、三维等多维数组,以其中某一维元素为基础进行排序。
如图1,我们把一个二维数组按照第二维元素由小到大升序排序,并使第一维元素联动。

以上的操作在excel中是比较方便的,只需要将选中第二列,再点击【排序和筛选】就能完成,在C语言编程中可以参考如下办法:
设原始数组为
int a [10] [2] = {{10,4},{2,2},{3,12},{4,23},{5,5},{6,87},{9,7},{8,22},{7,9},{1,10}};
前边的原始程序做一些小修改即可:
#include<stdio.h>
void main()
{
int a [10] [2] = {{10,4},{2,2},{3,12},{4,23},{5,5},{6,87},{9,7},{8,22},{7,9},{1,10}};//改为我们需要的二维数组
int i,j,t,t1; //增加一个临时变量t1
for(j=0;j<10;j++) 
for(i=0;i<10-1-j;i++)
if(a[i][1]>a[i+1][1]) /* 由小到大,由大到小时改为< */
{
t=a[i][0]; 
t1=a[i][1]; 
a[i][0]=a[i+1][0]; 
a[i][1]=a[i+1][1];
a[i+1][0]=t;
a[i+1][1]=t1;
}
for(i=0;i<10;i++)
{printf("%d ",a[i][0]);
printf("%d ",a[i][1]);
}
}
这样就能实现对二维数组a [10] [2]按照第二维元素升序排序,并联动第一维。

——我处提供单片机、电路板、控制器、电子产品、工控测控传感自动化系统、仪器仪表、装置设备、软件EXE编程、安卓APP开发设计定制等优质服务(QQ2531263726),欢迎惠顾

猜你喜欢

转载自blog.csdn.net/u010755676/article/details/79477199