二维数组排序,数组很大,size[i]表示i行有多少列,len表示有多少行.
# include "stdafx.h"
/*
二维数组排序,数组很大,size[i]表示i行有多少列,len表示有多少行
*/
bool FindMinElement( int *ptrs[], int len, int *idxMin ){
bool bHasElement = false;
int minElement = std::numeric_limits<int>::max();
for( int i = 0; i < len; i++ ){
if( ptrs[i] != NULL ){
bHasElement = true;
if( minElement > *ptrs[i] ){
minElement = *ptrs[i];
*idxMin = i;
}
}
}
return bHasElement;
}
//二维数组排序
void Sort( int **array, int *size, int len ){
// 快排每一行.
for( int i = 0; i < len; i++ )
sort( array[i], array[i] + size[i] );
int *ptrs[10];
int nElements = 0;
for( int i = 0; i < len; i++ ){
nElements += size[i];
ptrs[i] = array[i];
}
// 对每一行首元素找到最小值,下标加1,并输出.
for( int i = 0; i < nElements; i++ )
{
int idxMin;
if( FindMinElement( ptrs, len, &idxMin) ){
cout << *ptrs[idxMin] << " ";
// 是否是最后一个元素.
if( *ptrs[idxMin] == array[idxMin][size[idxMin]-1] )
ptrs[idxMin] = NULL;
else
ptrs[idxMin]++;
}
}
cout << endl;
}
int main(){
int a1[] = {1000,232,3,4,5,6,22,4,1,14,123123,45,2};
int a2[] = {444,213,4521,333,124,145,123,51};
int a3[] = {444,23,4521,333,14,145,123,51};
int *a[3] = {a1, a2, a3};
int size[] = {sizeof(a1)/sizeof(int), sizeof(a2)/sizeof(int), sizeof(a3)/sizeof(int)};
int len = 3;
Sort( a, size, len );
}
/*
1 2 3 4 4 5 6 14 14 22 23 45 51 51 123 123 124 145 145 213 232 333 333 444 444 1
000 4521 4521 123123
请按任意键继续. . .
*/