二维数组的列排序

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
using namespace std;

#include "oj.h"

// 功能:排列一个m行n列 大小的数组
// 输入: int * pArray 指向数组第一个元素的指针,m为行数, n为列数 ,请按第i列排列
// 输出:按第i列排序完成后的数组放到入参指定的地址中	(i的取值范围 1 - n)  
// 返回:
void RangeArray(int * pArray,unsigned int  m, unsigned int  n,unsigned int  i)
{	
	bool flag =0;//用来标识下一行是否比上一行小,若下一行小,则flag 为1,否则为0;
	int temp =0;
	for (unsigned int row =0; row < m-1; ++row)
	{
		flag =0;
		for (unsigned int col = i-1; col < n; ++col)
		{

			if (pArray[row * n + col] > pArray[row * n + n + col])
			{
				flag = 1;
				break;
			}
		}
		if (flag == 1)//下行比上一行小,交换两行的元素
		{
			for (unsigned int  col1 =0; col1 < n; ++col1 )
			{
				temp =pArray[row * n + col1];
				pArray[row * n + col1] =pArray[row * n + n + col1];
				pArray[row * n + n + col1] = temp;
			}
		}
	}
	
}

int main()
{
	int pArray[2][4] = {2,3,4,5,3,7,8,10};
	RangeArray(&pArray[0][0],2,4,1);
	for (int i =0; i < 2; ++i)
	{
		for (int j =0; j < 4; ++j)
		{
			cout<<pArray[i][j]<<"	";
		}
		cout<<endl;
	}

	int RetArray[4][3] = {1,2,3,2,3,4,2,3,1, 1,3,1};
	RangeArray(&RetArray[0][0],4,3,2);
	for (int i =0; i < 4; ++i)
	{
		for (int j =0; j < 3; ++j)
		{
			cout<<RetArray[i][j]<<"	";
		}
		cout<<endl;
	}
	return 0;
}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。