二维数组行排序(借助冒泡排序思想进行由小到大排列)
(注:这里遇到题目的第一反应是用数组指针,其实不用数组指针更容易读懂,但我还是觉得应该复习巩固指针的用法,学了可以不用,但是不能不会用,所以我觉得平时还是引用,指针还有数组,都尝试写一下)
输入4*4的矩阵(44矩阵只是随手的宏定义需要几行几列的数据可以自行对程序稍加修改),
也就是键盘输入16个数给数组a[4][4]赋值,然后对这个数组以每一行为一个单位进行排序,排序规则如下:
两单元对应元素位置一一比较,一旦遇到单元元素对应位置前者
比后者小则认定前单元比后单元小。列如
输入:
1 1 5 3
1 1 2 3
1 2 1 1
2 0 1 5
输出:
1 1 2 3
1 1 5 3
1 2 1 1
2 0 1 5
C语言代码块:
#include<stdio.h>
#include<math.h>
#include<malloc.h>
# define N 4
void swap(int a[],int b[]){//行单元元素对应比较,对应相同则一直比到结尾
int i; //对应位置前单元比后单元大则交换以后所有元素,小则退出循环不做处理
for(i=0;i<N;i++){
if(a[i]>b[i]){//一旦遇到前一个行的元素比下一行与之对应的元素大,自此元素往后全部元素对应交换
for(;i<N;i++){//循环交换剩余元素
int temp=a[i];
a[i]=b[i];
b[i]=temp;
}
break;
}
if(a[i]<b[i])
break;
}
}
int main(){
int i,j,k;
int a[N][N];
//输入数据
for(i=0;i<N;i++)
for(j=0;j<N;j++){
scanf("%d",&a[i][j]);
}
printf("\n");
int (*p)[N];//指向数组a的数组指针
p=a;
//把每一行数据看作一个单元 对每一个单元利用冒泡排序的思想进行由低到高排序
for(i=0;i<N-1;i++){
for(j=0;j<N-1-i;j++){
swap(*(p+j),*(p+j+1));//一个单元数据和下一个单元数据进行比较并交换(一行和下一行进行比较并交换)
}
}
//数据打印
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%d ",*(*(p+i)+j));
printf("\n");
}
return 0;
}
运行结果: