/*單鏈表結點資料結構*/
typedef struct node
node_t, *list_t;
1移動結點上的值
1.1
選擇排序(時間複雜度為
o(n^2))
void list_select_sort(list_t h)
}s->key = p->key;
p->key = min;
}return ;
}
1.2
快速排序
(時間複雜度為o(nlogn))
宣告兩個指標p和
q,兩個指標均往
next
方向移動,移動過程中保持
p之前的
key都小於選定的
key,p和
q之間的
key都大於選定的
key,則當
q走到末尾的時候便完成了一次支點的尋找。
/*交換資料*/
void swap(int *n, int *m)
/*分割槽操作*/
list_t partion(list_t bgn, list_t end)
q = q->next;
}swap(&p->key, &bgn->key);
return p;
}/*快速排序*/
void list_quick_sort(list_t bgn, list_t end)
}
2
移動結點
類似快速排序,採用遞迴分治方法進行排序的,每次對原有的鍊錶進行一次劃分,每次劃分取鍊錶的左端的那個結點值作為樞軸,將小於樞軸的值用
t1 指標連線起來,將大於樞軸的值用
t2 指標連線起來,然後在分別對這
2 個短的鍊錶進行遞迴排序。
list_t qsortl(list_t h, list_t lnext)
else
}t1->next = t2->next = null;
h->next = qsortl(n2.next,lnext);
return qsortl(n1.next, h);
}
單鏈表之排序單鏈表
package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...
單鏈表的排序
這是前幾天hottey面試的乙個題目 不借助外部陣列,只對鍊錶本身進行操作來完成排序。我覺得甚有意思,便實現了乙個。程式 如下 include using namespace std template struct node 節點結構 template class slist 單鏈表結構 slist...
單鏈表的排序
歸併排序的一種比較快的排序,尤其在鍊錶中,在所有排序中是時間複雜度為nlog n 級別的有三種,分別為快速排序,堆排序和歸併排序,但是快速排序在單鏈表中沒有優勢 適合於雙向鍊錶 同樣堆排序在建堆和調整堆得過程對於單鏈表也是比較麻煩,這裡我們選取了歸併排序。歸併排序的概念和原理我就不介紹了,網上的相關...