2014-01-05 164 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

謝謝這麼多! :) –