排序算法汇总
2016-06-24 13:18
411 查看
数据结构的一部分重要内容便是排序算法,对于排序之后的数组可以采用快速的 binary search 算法。排序算法多种多样,按类别有插入类、选择类、交换类,还有一些其他的比如归并等等,对于数据量太多内存无法盛放的情况,则有外部排序。度量各种算法的标准主要有,1)稳定性,2)最好/坏情况下的时间复杂度,3)最好/坏情况下的空间复杂度。
View Code
归并排序最好最坏的时间复杂度均为 $O(nlgn)$ ,空间复杂度也为 $O(n)$ ,且最大的优点是在 $O(nlgn)$ 中他是一种稳定的排序算法。
5. 外部排序
//归并排序算法,类似于数组的归并,思路基本完全一样 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. 外部排序
相关文章推荐
- 增量式PID推导及C语言实现
- 基数排序的性能优化
- 最常用的两种C++序列化方案的使用心得
- Error:(4) Error retrieving parent for item: No resource found that matches the given name 'android:T
- 信息的表示和处理(3)
- Java Web项目中使用Freemarker生成Word文档
- struts2 #,%,$的用法
- Java中类的初始化顺序
- Windows 无法安装到这个磁盘。选中的磁盘具有MBR分区表”的处理
- 高阶排序算法手撸(Java语言)
- Windows 无法安装到这个磁盘。选中的磁盘具有MBR分区表”的处理
- 文章标题
- Windows 无法安装到这个磁盘。选中的磁盘具有MBR分区表”的处理
- MyBatis
- 操作系统--主存空间的分配和回收
- IE兼容
- 银行家算法(操作系统)(c++)
- android intent 传递list或者对象
- 剑指offer---链表中倒数第k个结点
- altium designer 中的top/bottom solder和top/bottom paste mask