二維陣列行排序

騎著螞蟻闖世界發表於2020-10-09

二維陣列行排序(由小到大)

輸入4*4的矩陣(4*4矩陣只是隨手的巨集定義需要幾行幾列的資料可以自行對程式稍加修改),
也就是鍵盤輸入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

#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;
} 

在這裡插入圖片描述

相關文章