数组排序的问题

dangerxiaoxin 2009-06-10 08:35:48
1 2
1 1
1 4
2 3
2 5
2 4
3 7
3 4
3 6
举例这样2组数组,我想把第2组数组中对应1的数,对应2的数,对应3的数分别进行排序,该怎么做呢。我用的是Heapsort!实际上数组要比这个长很多
...全文
27 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiveyes 2009-06-16
  • 打赏
  • 举报
回复
我觉得这个问题和普通的排序问题还是一样的,只是多了一个查找头尾的工作。要想提高效率,可能还要再找找别的办法。比如说,第2组数中的每组数,如果都是由若干个互不相等的数组成,且取值范围不大,那就可以用基于数值的排序方法来做了,比基于比较的方法肯定快很多。
a598420668 2009-06-16
  • 打赏
  • 举报
回复

#include<iostream.h>
#include<swap.h>
void arrange(int n,int m){
static N=n;
static a[100];
if(N==n){
for(int i=0;i<N;i++){
a[i]=i+1;
}
}
static END=n-m;
if(n==END){
for(int j=0;j<m;j++){
cout<<a[j]<<" ";
}
cout<<endl;
}
else{
arrange(n-1,m);
for(int j=N+1-n;j<N;j++){
swap(a[N-n],a[j]);
arrange(n-1,m);
swap(a[N-n],a[j]);

}
}
}
void main(){
arrange(4,2);
}

这个可以不?(可以改变arrange()里的参数来控制打印的结果)
qq675927952 2009-06-14
  • 打赏
  • 举报
回复
没看懂题意?
a598420668 2009-06-13
  • 打赏
  • 举报
回复

#include<iostream.h>
#include<fstream.h>
#include<swap.h>
int a[]={1,2,3,4};
int aa=1;
ofstream as("a.xls");
void fun(int n){

if(n==1){
for(int j=0;j<4;j++){
cout<<a[j]<<" ";
as<<a[j];
}
cout<<"("<<aa++<<")"<<endl;
as<<endl;
}
else{
fun(n-1);
for(int j=5-n;j<4;j++){
swap(a[4-n],a[j]);
fun(n-1);
swap(a[4-n],a[j]);

}
}
}
void main(){
fun(4);
}

希望能帮到你
a598420668 2009-06-13
  • 打赏
  • 举报
回复
补:swap.h代码如下:

void swap(int &a,int &b){
int t;
t=a;
a=b;
b=t;
}
dangerxiaoxin 2009-06-11
  • 打赏
  • 举报
回复
是这样的,就是把一个数组分成几段,对每一段进行排序!
Einst1993 2009-06-11
  • 打赏
  • 举报
回复
我对您的描述实在不是很清楚。。
dangerxiaoxin 2009-06-10
  • 打赏
  • 举报
回复
但是如果只是指定Heapsize的话,没法确定从第几位到第几位进行排序啊!而且我的数组大的很,我也不能一一确定每一部分的heapsize!
sunkailiuying 2009-06-10
  • 打赏
  • 举报
回复
我们做过这样的实验,我回去帮你找找源代码~~~看看有没有,有就给你传哈~~~
光宇广贞 2009-06-10
  • 打赏
  • 举报
回复
非常方便。

你可以使用 快排,指定好头尾就可以了。比如说对应 1 的,指定 0 到 2 位进行排序,对应 2 的,从 3 到 5 位进行排序。

你用堆排一样可以做得到,只要指定头尾就可以。

快排和堆排都是本地排序,不需要很特别的花样。

代码就写了。比如说像快排,本身参数就是需要输入头与尾下标的。

而堆排,也是可以指定 HeapSize 的,对不?我这里就不用把堆排和快排的标准代码给楼主你了吧。

加油吧。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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