[华为机试练习题]21.二维数组的列排序

来源:互联网 发布:python开源什么意思 编辑:程序博客网 时间:2024/05/06 16:21

题目

描述:     给出一个二维数组,请将这个二维数组按第i列(i从1开始)排序,如果第i列相同,则对相同的行按第i+1列的元素排序,如果第i+1列的元素也相同,则继续比较第i+2列,以此类推,直到最后一列。如果第i列到最后一列都相同,则按原序排列。 实现以下接口:输入一个m*n 的整数数组,实现按规则排列,返回排列后的数组。调用者会保证:比如输入数组为: 1,2,32,3,42,3,11,3,1按第二列排序: 输出: 1,2,32,3,11,3,12,3,4练习阶段:    初级 

代码

/*---------------------------------------*   日期:2015-06-30*   作者:SJF0115*   题目:二维数组的列排序*   来源:华为上机-----------------------------------------*/#include <vector>#include <algorithm>#include "oj.h"using namespace std;// 功能:排列一个m行n列 大小的数组// 输入: int * pArray 指向数组第一个元素的指针,m为行数, n为列数 ,请按第i列排列// 输出:按第i列排序完成后的数组放到入参指定的地址中    (i的取值范围 1 - n)  // 返回:int sortIndex = 0;int col = 0;// 按列排序bool cmp(const vector<int> &a, const vector<int> &b){    for(int i = sortIndex - 1;i < col;++i){        if(a[i] == b[i]){            continue;        }//for        else{            return a[i]<b[i];        }//else    }//for    return a[col-1] < b[col-1];}void RangeArray(int * pArray,unsigned int  m, unsigned int  n,unsigned int  i){    if(pArray == NULL || m <= 0 || n <= 0 || i >= n){        return;    }//if    sortIndex = i;    col = n;    // 一行    vector<int> rowVec;    vector<vector<int>> matrix;    int *array = pArray;    // 存放在vector    for(int i = 0; i < m; i++){        for(int j = 0; j < n; j++){            rowVec.push_back(*array);            array++;        }//for        matrix.push_back(rowVec);        rowVec.clear();    }//for    // 排序    sort(matrix.begin(),matrix.end(),cmp);    // 排序后的数据放入pArray    array = pArray;    for(int i = 0; i < m;++i){        for(int j = 0;j < n;++j){            *array = matrix[i][j];            array++;        }//for    }//for}
1 0
原创粉丝点击