【问题标题】:Selection sort on a list in cc中列表上的选择排序
【发布时间】:2018-10-01 16:33:06
【问题描述】:
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。 没有错误。问题出在算法上。

【问题讨论】:

  • 请不要添加填充文本。而是用实际的细节填写它!比如您的输入、预期和实际输出,以及您为尝试和调试程序所做的工作。
  • 你在哪里调用sort()?在main() 中,您调用sortare()。那叫sort()吗?
  • 我想我会尝试从数组中的列表中提取值,用简单的算法对其进行排序,然后将它们重新排序
  • 在我的代码中称为 sortare,但问题不在此

标签: c list sorting


【解决方案1】:
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;
}
}

双链表上的选择排序

【讨论】:

    猜你喜欢
    • 2016-01-18
    • 2015-06-21
    • 2016-02-21
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    相关资源
    最近更新 更多