【发布时间】:2014-03-01 04:15:53
【问题描述】:
我试图弄清楚如何按升序对双向链表进行排序,但无法理解它。对于我的标题,我有以下内容,其中 select_sort 是对其进行排序的函数。
#ifndef INTLIST_H
#define INTLIST_H
struct IntNode{
int data;
IntNode *next;
IntNode(int data) : data(data), next(0) {}
};
class IntList{
private:
IntNode *head;
IntNode *tail;
public:
void select_sort();
编辑:
我的可怕功能
void IntList::select_sort(){
for(IntNode *holder = head; holder != NULL; holder = holder -> next){
IntNode *temp2 = holder;
for(IntNode *temp = holder -> next; temp!=NULL;temp = temp->next){
if(temp2 -> data > temp -> data){
temp2 = temp;
}
}
int holder2 = tail -> data;
tail -> data = temp2 -> data;
temp2 -> data = holder2;
}
}
【问题讨论】:
-
你尝试了什么?
-
添加了我可怕的功能
-
因为你的数据只是整数,你应该使用bucket sort算法。桶排序对于链表来说特别容易实现,而且它还具有 O(n) 的计算复杂度,有些人会告诉你这是不可能的,所以它非常适合用它来赢得争论。