求对一个4行5列的矩阵按从小到大排序的算法(用C++语言写)

求一个4行5列的矩阵按从小到大排序的算法(用C++语言写),如果能够提供源代码,我再多送一百分

坚决拿下这200分!
这是个完整的程序,包括输入和输出部分。

#include<iostream>
using namespace std;

int main()
{
int a[4][5]={0};
int i,j,temp,*p;

//输入
cout<<"请输入一个4行5列的矩阵:"<<endl;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
cin>>a[i][j];

//冒泡排序
p=&a[0][0];
for(i=0;i<4*5;i++)
for(j=4*5-1;j>i;j--)
if(p[j]>p[j-1])
{//交换
temp=p[j];
p[j]=p[j-1];
p[j-1]=temp;
}

//输出
cout<<"排序后的矩阵是:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-01
用一个一级的指针指向二维数组,然后那个指针可以像一维数组排序那样用,因为二维数组也是连续的.
例如:
#include <iostream>
#include <algorithm>
void func(int n)
{
std::cout < <n < <" ";
}
int main()
{
int a[3][3]={1,9,3,7,5,6,2,8,4};
std::sort((int*)a,&a[2][3]);
std::for_each((int*)a,&a[2][3],func);
system("pause");
return 0;
}

你可以参考一下这个网址:
http://topic.csdn.net/u/20071229/13/a7f1a240-fe88-49b1-b527-440ffda0cf55.html
第2个回答  2008-12-02
题可难可易,分到很高。答了这么多人,我也不好再发代码了。上面四楼的基本思想都是最简单的想法,把二维矩阵放在一维数组里,然后对一维数组排序,对一维数组的排序就简单了,方法多的是。
我说一种算法:
1.对每行排序
2.然后把1,2,3,4行合并排序
觉得难的话就用上面4个的吧~~想学的话就给我发信息
第3个回答  2008-12-01
源码如下:以整型为实验,二维数组为数据类型,多重for循环方法实现。
main()
{
int a[4][5];
int i, j, k;
int min;
int *p;
printf("enter a[][]:\n");
p=a;
for(i=0;i<20;i++)
{
scanf("%d", p+i);
}
for(i=0;i<19;i++)
{
for(j=i+1;j<20;j++)
{
if(*(p+i)>*(p+j))
{
min=*(p+i);
*(p+i)=*(p+j);
*(p+j)=min;
}
}
}
printf("从小到大排列");
for(i=0;i<4;i++)
{
printf("\n");
for(j=0;j<5;j++)
printf("%d\t", a[i][j]);
}
}
说明:用int*p=a;降低了二维数组的操作难度是常用方法。
第4个回答  2008-12-02
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int a[4][5]={......};
int b[20];
int num=0;
for(int i=0;i<4;i++){
for(int j=0;j<5;j++){
b[num++]=a[i][j];
}
}
sort(b,num);
num=0;
for(int i=0;i<4;i++){
for(int j=0;j<5;j++){
a[i][j]=b[num++];
}
}
return 0;
}

最后a是排好序的,要打印的话,自己打印出来就可以了。
相似回答