java:链表排序
来源:互联网 发布:2017电视直播软件港台 编辑:程序博客网 时间:2024/06/07 16:31
题目描述:Sort a linked list using insertion sort.
使用插入排序对链表进行排序
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode insertionSortList(ListNode head) { }}
【思路】:使用插入排序
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
ListNode fakeNode=new ListNode(-1); fakeNode.next=head; if(head==null) return null; ListNode cur=head.next;//从第二个节点开始遍历 ListNode pre=head;//排好序的最后一个节点 while(cur!=null) { if(cur.val<pre.val) { ListNode nextNode=cur.next;//保存下一个需要遍历的节点 //寻找插入的合适位置 ListNode cur2=fakeNode.next; ListNode temp=fakeNode;//记录cur2前面一个节点 while(cur.val>cur2.val&&cur2!=pre) { temp=cur2; cur2=cur2.next; } //进行插入 temp.next=cur; cur.next=cur2; pre.next=nextNode; //继续遍历下一个节点 cur=nextNode; } else { pre=cur; cur=cur.next; } } return fakeNode.next;
//代码是参考自http://blog.csdn.net/u012249528/article/details/47151847
0 0
- java链表排序
- java:链表排序
- Java链表的排序
- Java实现-链表排序
- 单向链表归并排序 Java
- 单向链表插入排序 Java
- java使用链表实现排序
- java常用数据,排序,链表等
- java 合并两个排序的链表
- Java实现-合并两个排序链表
- Java实现链表的增删排序
- java实现合并两排序链表
- LeetCode147_Insertion Sort List(用插入排序算法对链表进行排序) Java题解
- 链表排序 归并排序
- 链表排序--选择排序
- 链表排序--快速排序
- 链表排序--归并排序
- java排序----鸡尾酒排序
- 文件组织方式
- Yaf学习之整合yii
- java:AWT绘图
- 多旋翼无人机动力系统发展历程
- session地址的重写
- java:链表排序
- Android开发过程中常用到的工具类HttpUtils,SDCardUtils
- Windows下Tensorflow运行tensorboard心得
- C++的运算符重载
- Oracle 之 case when 用法大全
- 进程分析的常用套路
- 地址线和数据线(为什么用字节来计量存储容量)
- BasePager,公共页面
- 自己