学习插入排序

来源:互联网 发布:apache 监控 编辑:程序博客网 时间:2024/06/15 18:59
/** * 插入排序的详细思想: * 重新创建一个链表,并将第一个元素的值赋值给新链表 * 用一个指针pointer指向待排序链表的第二个元素,并且用next保存pointer的下一个元素 * 用一个指针innerPointer指向新链表的第一个元素 * 比较pointer.val 和 innerPointer.val,如果pointer.val <= innerPointer.val,那么将pointer指向的元素放在新链表的最前面 * 如果pointer.val > innerPointer.val * 判断新链表是否还有后续节点,如果有: *  判断pointer指向的节点是否满足 : pointer.val > innerPointer.val && pointer.val <= innerPointer.next.val *  满足条件就将pointer指向的元素插入到innerPointer和innerPointer.next之间,innerPointer继续向后 *  新链表不存在后续节点了: *  判断pointer指向的值是否大于最后一个元素的值: *      大于就插入到新链表的最后位置 *  pointer指针继续向后,直到pointer == null结束 *   * @author Linchong * */class ListNode {int val;ListNode next;public ListNode(int val) {this.val = val;}}public class InsertSort {public static void main(String[] args) {ListNode node1 = new ListNode(2);ListNode node2 = new ListNode(3);ListNode node3 = new ListNode(4);ListNode node4 = new ListNode(3);ListNode node5 = new ListNode(4);ListNode node6 = new ListNode(5);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;node5.next = node6;sortLinkedList(node1);printList(node1);}private static ListNode sortLinkedList(ListNode head) {if(head == null || head.next == null) {return head;}ListNode newHead = new ListNode(head.val);ListNode pointer = head.next;while(pointer != null) {ListNode innerPointer = newHead;ListNode next = pointer.next;//待插入点小于等于第一个元素if(pointer.val <= innerPointer.val) {ListNode oldHead = newHead;newHead = pointer;pointer.next = oldHead;}else{while(innerPointer.next != null) {if(pointer.val > innerPointer.val && pointer.val <= innerPointer.next.val) {ListNode oldNext = innerPointer.next;innerPointer.next = pointer;pointer.next = oldNext;}innerPointer = innerPointer.next;}if(innerPointer.next == null && pointer.val > innerPointer.val) {innerPointer.next = pointer;pointer.next = null;}}pointer = next;}return newHead;}private static void printList(ListNode node1) {if(node1 != null){ListNode p = node1;while(p != null) {System.out.print(p.val + " ");p = p.next;}}}}

原创粉丝点击