您的位置:首页 > 其它

排序算法汇总

2016-06-24 13:18 411 查看
数据结构的一部分重要内容便是排序算法,对于排序之后的数组可以采用快速的 binary search 算法。排序算法多种多样,按类别有插入类、选择类、交换类,还有一些其他的比如归并等等,对于数据量太多内存无法盛放的情况,则有外部排序。度量各种算法的标准主要有,1)稳定性,2)最好/坏情况下的时间复杂度,3)最好/坏情况下的空间复杂度

//归并排序算法,类似于数组的归并,思路基本完全一样
public ListNode sortList(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode prev = null;
ListNode slow = head, fast = head;
while(fast != null && fast.next != null){
prev = slow; // 记录后半部分的头指针
slow = slow.next;
fast = fast.next.next;
}
prev.next = null; // 断开连接

ListNode h1 = sortList(head);
ListNode h2 = sortList(slow);

return merge(h1, h2);
}//归并两个链表的过程
public ListNode merge(ListNode h1, ListNode h2){
ListNode fake = new ListNode(0);
ListNode tail = fake;
while(h1 != null && h2 != null){
if(h1.val > h2.val){
tail.next = h2;
h2 = h2.next;
}else{
tail.next = h1;
h1 = h1.next;
}
tail = tail.next;
}
if(h1 != null) tail.next = h1;
if(h2 != null) tail.next = h2;
return fake.next;
}


View Code
归并排序最好最坏的时间复杂度均为 $O(nlgn)$ ,空间复杂度也为 $O(n)$ ,且最大的优点是在 $O(nlgn)$ 中他是一种稳定的排序算法。

5. 外部排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: