高手帮帮我 关于二维数组排序。在线等 急啊!!!

eroscheng 2006-06-18 06:50:34
初始数组:
a b d
1 1 0 2
2 0 1 1
3 2 0 1
4 1 1 2
5 1 0 0
6 2 2 1
7 2 1 1
8 0 1 0


排序后
a b d

8 0 1 0
2 0 1 1
5 1 0 0
1 1 0 2
4 1 1 2
3 2 0 1
7 2 1 1
6 2 2 1

第一次 a 排序
第二次 在a 排序的基础上 按b排序
以此类推。
在线等待。

...全文
256 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmmcd 2006-06-18
  • 打赏
  • 举报
回复
两个三元组xi(ai,bi,di)和xj(aj,bj,dj),
比较大小的函数使用:
第一次:less1(xi,xj) => ai<aj
第二次:less2(xi,xj) => ai<aj || ai==aj && bi<bj
第三次:less3(xi,xj) => ai<aj || ai==aj && bi<bj || ai==aj && bi==bj && di<dj

不论冒泡或快排都行
kingbo2006 2006-06-18
  • 打赏
  • 举报
回复
这是用冒泡法的程序实现过程,你也可以改成用其它更快的排序法来实现。
#include <iostream>
using namespace std;
void main()
{
int a[8][3]={{1,0,2},{0,1,1},{2,0,1},{1,1,2},{1,0,0},{2,2,1},{2,1,1},{0,1,0}};
for (int i=2;i>=0;i--)
{
for(int j=0;j<7;j++)//排序过程
{
for(int k=1;k<8-j;k++)
{
if(a[k-1][i]>a[k][i])
{
for(int m=0;m<=2;m++)
{
int temp=a[k-1][m];
a[k-1][m]=a[k][m];
a[k][m]=temp;
}
}
}
}
}
for(int i=0;i<=7;i++)//结果输出
{
for(int j=0;j<=2;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}

}
kingbo2006 2006-06-18
  • 打赏
  • 举报
回复
程序的算法思想如下:
初始状态
a b d
1 1 0 2
2 0 1 1
3 2 0 1
4 1 1 2
5 1 0 0
6 2 2 1
7 2 1 1
8 0 1 0
先按d排序
5 1 0 0
8 0 1 0
2 0 1 1
3 2 0 1
6 2 2 1
7 2 1 1
1 1 0 2
4 1 1 2
再按b排序
5 1 0 0
3 2 0 1
1 1 0 2
8 0 1 0
2 0 1 1
7 2 1 1
4 1 1 2
6 2 2 1
最后按 a 排序
8 0 1 0
2 0 1 1
5 1 0 0
1 1 0 2
4 1 1 2
3 2 0 1
7 2 1 1
6 2 2 1
以上是我的程序思考过程,只要是用稳定排序法就一定能得到这样的结果。
如果用冒泡法其算法度为O(3*n*n)。这样做比直接按a,b,d的顺序要好一些,可以减少程序的杂性。
eroscheng 2006-06-18
  • 打赏
  • 举报
回复
能给我代码看看吗?
hijack 2006-06-18
  • 打赏
  • 举报
回复
跟排序一维的类似,使用STL的话很简单
把数据结构安排好,写个仿函数,直接用std::sort排序

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧