2014-01-05 130 views
1

我不知道这是否是基本的,但我只知道如何按升序排序。如何按降序对链表进行排序?

system("cls"); 
    if (headptr != (struct online*)NULL) 
{ 

    currentptr = headptr; 
    for(; currentptr->ptrnext != NULL; currentptr = currentptr->ptrnext) 
    { 
     for(newptr = currentptr->ptrnext; newptr != (struct online*)NULL; newptr = newptr->ptrnext) 
     { 
      if(currentptr->score > newptr->score) 
      { 
       int temp = currentptr->score; 
       currentptr->score = newptr->score; 
       newptr->score = temp; 
      } 
     } 
    } 

} 
+0

这部分负责对订单作出决定?什么是补充操作? –

+0

重复了很多问题...你尝试过: http://stackoverflow.com/questions/5526750/linked-list-sorting-in-c http://stackoverflow.com/questions/11813696/sorting -a-linked-list-in-c 甚至简单的谷歌? 如果您可以按升序对其进行排序,则可以通过颠倒比较来颠倒顺序,就像这里提到的答案一样。 –

回答

0

是的,这很容易。只需将操作符从'>'更改为'<'即可。所以它会以另一种顺序交换元素。

我没有测试的代码,但如果您的原始片段是工作,那么你所要做的仅仅是:

system("cls"); 
    if (headptr != (struct online*)NULL) 
{ 

    currentptr = headptr; 
    for(; currentptr->ptrnext != NULL; currentptr = currentptr->ptrnext) 
    { 
     for(newptr = currentptr->ptrnext; newptr != (struct online*)NULL; newptr = newptr->ptrnext) 
     { 
      if(currentptr->score < newptr->score) 
      { 
       int temp = currentptr->score; 
       currentptr->score = newptr->score; 
       newptr->score = temp; 
      } 
     } 
    }  
} 

在这里,您可以观看动画可视化不同的排序算法,它可以帮助你了解更深层次的方式冒泡排序的工作原理:

Sorting Algorithms - Visualized

+0

谢谢!哈哈我不知道这很容易! –

+0

没问题。也许你应该花一些时间来更清楚地了解你的代码在做什么。尝试逐步调试,看看它是如何工作的。请不要忘记接受帮助您解决问题的答案,并且还可以投票。谢谢! –

+0

完成!我必须承认,我在编码方面并不擅长,而且我仍然处于学习过程中。再次感谢! :) –

1

变化

if(currentptr->score > newptr->score) 

到它的互补操作

if(currentptr->score <= newptr->score) 

这将颠倒顺序。

+0

谢谢这么多! :) –