程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 二維數組的列排序

二維數組的列排序

編輯:C++入門知識

二維數組的列排序


給出一個二維數組,請將這個二維數組按第i列(i從1開始)排序,如果第i列相同,則對相同的行按第i+1列的元素排序,如果第i+1列的元素也相同,則繼續比較第i+2列,以此類推,直到最後一列。如果第i列到最後一列都相同,則按原序排列。

 

實現以下接口:

輸入一個m*n 的整數數組,實現按規則排列,返回排列後的數組。

調用者會保證:

比如輸入數組為:

1,2,3

2,3,4

2,3,1

1,3,1

按第二列排序:

輸出:

1,2,3

2,3,1

1,3,1

2,3,4

 

分析:從最後一列開始使用穩定的排序算法(必須是穩定,可采用冒泡排序)排序,一直排序到指定的列為止。

程序代碼如下:

 

// 功能:排列一個m行n列 大小的數組
// 輸入: int * pArray 指向數組第一個元素的指針,m為行數, n為列數 ,請按第i列排列
// 輸出:按第i列排序完成後的數組放到入參指定的地址中	(i的取值范圍 1 - n)  
// 返回:
void RangeArray(int * pArray,unsigned int  m, unsigned int  n,unsigned int  i)
{	
	if( pArray == NULL || m<0 || n<0 || i>n )
		return;
	int * tempArray=new  int[n];
	//從最後一列開始排序,排序到指定列
	for(unsigned int column=n-1;column>=i-1;column--){
		//對每一列進行排序,冒泡排序的變形
		for(unsigned int i=0;i *(pArray+(j+1)*n+column)){
					memcpy(tempArray,pArray+j*n,n*sizeof(int));
					memcpy(pArray+j*n,pArray+(j+1)*n,n*sizeof(int));
					memcpy(pArray+(j+1)*n,tempArray,n*sizeof(int));
				}	
			}
			
		}
		if(column==0)
			break;
	}

}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved