typedef struct node {
struct node *prev;
int index;
int val;
struct node *next;
} nod;
nod *p, *q, *r, *prim;
void print()
{ p=prim;
while(p!=NULL)
{
printf("%d ",p->val);
p=p->next;
}
}
void swap(nod *p, nod *max) {
int tmp=p->val;
p->val=max->val;
max->val=tmp;
}
void sort() {
q=prim->next;
nod *max;
while(p!=NULL) {
max=prim;
while(q->index<p->index) {
if(q->val>max->val) {
max=q;
}
q=q->next;
}
swap(p,max);
p=p->prev;
}
}
//some other functions that work fine
int main()
{
int n=10, index=0;
//prim=(nod *) malloc(sizeof(nod)); done in add
prim=NULL;
do {
add(rand()%100, &index); //added succesufully
} while(index<10);
printf("Before sorting:\n");
print();
sortare();
printf("\nAfter sorting:\n");
print();
}
我在这个列表中提供了类似选择排序的内容,但我认为它有问题,因为它是not really sorted。 没有错误。问题在于算法。
答案 0 :(得分:0)
typedef struct node {
struct node *prev;
int index;
int val;
struct node *next;
} nod;
nod *p, *q, *last, *prim;
void swap(nod *p, nod *max) {
int tmp=p->val;
p->val=max->val;
max->val=tmp;
}
void sort() {
nod *max;
p=last;
while(p!=NULL && p->index>0) {
max=prim;
q=prim->next;
while(q!=NULL && q->index<=p->index) {
if(q->val>max->val) {
max=q;
}
q=q->next;
}
swap(p,max);
p=p->prev;
}
}
双链表上的选择排序