静态链表法排序
#include<iostream.h>class node{
public:
int data;
int intex;
node(){}
node(int d){
data=d;
intex=0;
}
};
class list{
private:
int*s;
int msize;
public:
list(int size){
msize=size;
s=new int[msize];
}
void sort(node a[],int);
void output(node a[],int);
};
void list::sort(node a[],int n){
int i;int m;
a[0].intex=1;
a[1].intex=0;
int k;
for(i=2;i<=n;i++){
k=a[0].intex;
if(a[i].data<a[k].data){
a[0].intex=i;
a[i].intex=k;
}
else {k=a[0].intex;
while(a[k].intex!=0){
m=a[k].intex;
a[k].intex=i;
a[i].intex=m;
k=a[k].intex;
}
a[k].intex=0;
//for(i=a[k].intex;a[k].intex!=0&&a[i].data>=a[k].intex;k=a[k].intex){
//a[k].intex=i;
//a[i].intex=0;
//}
}
}
}
void list::output(node a[],int n){
int k=a[0].intex;
for(int i=0;i<n;i++)
cout<<i<<'\t';
cout<<endl;
for(i=0;i<n;i++)
cout<<a[i].data<<'\t';
cout<<endl;
for(i=0;i<n;i++){
cout<<a[i].intex<<'\t';
k=a[k].intex;}
}
void main(){
list l(3);
node a[5]={0,5,6,3,1};
l.sort(a,4);
l.output(a,5);
}
输入啊【5】={5,4,3,2,1}输出结果正确。
但是输入a[5]={0,5,6,3,1}错误
正确结果应该是
0 1 2 3 4
0 5 6 3 1
4 2 0 1 3
但出来的结果是
0 1 2 3 4
0 5 6 3 1
4 0 0 1 3
当a[i].data>=a[k].intex时的程序出错了
帮忙看一下
[ 本帖最后由 wu550399048 于 2012-12-11 23:29 编辑 ]