单链表实现直接插入排序(JAVA)

        去面试问了单链表实现快排的问题,所以想来把八大排序算法的单链表实现总结一下。 这篇就先总结直接插入排序。
        实际上,算法就是把原来的单向链表断开,变成前面的有序链表,和后面的待排序链表,各用两个指针控制,将待排序链表中的结点,一个个与有序链表中的结点作比较,找到应该插入的位置,执行操作。
        在插入时,要考虑其插入点的特殊性,比如链首和链尾操作的不同。

public LNode StraightInsertionSorting(LNode l) {
        if (l == null || l.next == null)
            return l;
        LNode pOrder = l;//有序链表中的游动指针,指向当前待比较的结点
        LNode pWait = l.next;//待排序链中的游动指针,指向待排序链表的第一个结点
        LNode pinsertNode;//指向待插入有序链表的结点
        LNode preOrder = pOrder;//指向pOrder的前一个节点,在插入时有用
        pOrder.next = null;//将有序链表和待排序链表断开
        while(pWait != null) {
            //每次比较前,要对四个指针进行初始化
            preOrder = pOrder = l;
            pinsertNode = pWait;
            pWait = pWait.next;
            pinsertNode.next = null;//将待插入节点和链表断开
            while(pOrder!=null) {
                if(pOrder.val > pinsertNode.val) {
                    if(pOrder == l) {//待插结点的值最小,需插在头部
                        pinsertNode.next = l;
                        l = pinsertNode;
                        break;
                    }
                    else {//待插结点需插入在有序链表中部,用到preOrder指针
                        pinsertNode.next = pOrder;
                        preOrder.next = pinsertNode;
                        break;
                    }
                }
                //循环体,在有序链表中寻找比待插结点数值大的结点
                preOrder = pOrder;
                pOrder = pOrder.next;
            }
            if(pOrder == null)//待插结点数值最大,需追加在尾部
                preOrder.next = pinsertNode;
        }
        return l;       
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,319评论 0 13
  • 原文地址:http://theory.stanford.edu/~amitp/GameProgramming/ 1...
    达微阅读 19,792评论 0 28
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 11,077评论 0 19
  • 父爱如山厚重,亲恩似瀑长奔。红尘黄土默耕耘。雪剑霜刀坚忍。 旧照吾思目滞,新车儿载心欣。青丝白发拂风云。子鲤千秋扶...
    珠江潮平阅读 5,461评论 28 47
  • 老周的《周鸿祎自述:我的互联网思维》被推为创业者必看书单之一,百忙之余的创业汪们不要忘了给自己充电哦,木朵带你快速...
    鸟人AI阅读 3,411评论 0 7