[leetcode]insertion-sort-list

问题: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) {
        if((head==null)||(head.next==null))
            return head;
        head=sort(head);
        return head;
        
        
    }
    public ListNode sort(ListNode head)
    {
        ListNode now=head;
        while(now!=null)
        {
            ListNode x=head;
            while(x.val<now.val&&x!=now)
            {
                x=x.next;    
            }
            ListNode start=x;
            int last=x.val;
            while(x!=now)
            {
                int temp=x.next.val;
                x.next.val=last;
                last=temp;
                x=x.next;
            }
            start.val=last;
            now=now.next;
        }
        return head;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,608评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,109评论 0 15
  • My code: 这道题目不难,但是很烦。自己也没能做出来。刚刚才分析过插入排序的,但是一旦涉及到链表,就好复杂。...
    Richardo92阅读 3,395评论 0 1
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 5,039评论 0 2
  • 概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的...
    Luc_阅读 6,820评论 0 35

友情链接更多精彩内容