c中列表的选择排序

时间:2018-04-20 22:18:59

标签: c list sorting

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。 没有错误。问题在于算法。

1 个答案:

答案 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;
}
}

双链表上的选择排序