二维数组行排序

7 篇文章 0 订阅

二维数组行排序(借助冒泡排序思想进行由小到大排列)

(注:这里遇到题目的第一反应是用数组指针,其实不用数组指针更容易读懂,但我还是觉得应该复习巩固指针的用法,学了可以不用,但是不能不会用,所以我觉得平时还是引用,指针还有数组,都尝试写一下)


输入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;
} 

运行结果:
在这里插入图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值