zoukankan      html  css  js  c++  java
  • 二维数组的列排序

    给出一个二维数组。请将这个二维数组按第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<m-1;i++){
    
    			for(unsigned int j=0;j<m-i-1;j++){
    
    				//交换数组元素
    				if(*(pArray+j*n+column) > *(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;
    	}
    
    }


  • 相关阅读:
    java中分页对象类
    java日期处理类DateUtil
    java日期处理类DateUtil
    Java Socket编程
    MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
    java中用SAX方式解析xml文件
    First Demo
    软件测试面试/笔试题题库(知识的搬运工,不谢!)
    2017年 6月29 开始博客园之旅--愿自己变得更强大!
    DUIEngine使用Visual Studio 2010编译Debug_Dll版有关Error MSB3073错误解决方案
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5246555.html
Copyright © 2011-2022 走看看