二维数组的列排序
2016-03-06 09:28
267 查看
给出一个二维数组。请将这个二维数组按第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 的整数数组。实现按规则排列,返回排列后的数组。
调用者会保证:
比方输入数组为:
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 ; //从最后一列開始排序。排序到指定列 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; } }
相关文章推荐
- UITableView
- android Butt 按钮单击事件的监听
- [视频]Win10 Mobile RedStone预览版磁贴动画演示:这就是淡入淡出
- CF #344 Div. 2
- HDU 3035 War 平面最小割+优先队列优化的dij
- 在web service间传递java bean
- Android ActionBar的基本用法(转自bigconvience)
- 磁盘、分区、文件系统
- Art of Unit Test :: Stubs
- mybatis--原始dao和代理Mapper
- ggplot2_散点图
- colorAccent,colorPrimary,colorPrimaryDark……来这里你就明白了
- Freemarker常用技巧
- Docker简介
- UIScrollView和MultiThreading、UITextField、Keyboard
- iOS之GCD再谈(dispatch_barrier_async)
- 选拔总结
- 消费者生产者
- Spring工作流程
- 来看看国外父母是怎么教孩子独立的