美文网首页
单链表实现直接插入排序(JAVA)

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

作者: Bamboooooo_Yoo | 来源:发表于2018-08-05 15:04 被阅读0次

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

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;       
    }

相关文章

  • 链表

    单链表 C实现 Java实现 双链表 C实现 Java实现

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

    去面试问了单链表实现快排的问题,所以想来把八大排序算法的单链表实现总结一下。 这篇就先总结直接插入排序。实际上,算...

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

  • Message.obtain()中的单链表栈缓存

    Message.obtain()中的单链表栈缓存 Android中的Message.java用单链表实现了一个si...

  • 单向链表反转(含图解)

    前言 上次讲解了单向链表的原理《Java实现单向链表功能》,今天拓展一下实现链表的翻转。下面直接上代码。 链表初始...

  • Java实现单链表

    链表的结构相信大家都已经理解,这次简单的实现一个单链表,以及其中的操作 第一步 定义节点类 其中定义泛型约束 以及...

  • Java实现单链表

    一、单链表简介 概念介绍链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元...

  • 线性表之单链表实现

    线性表之单链表实现 实现单链表的初始化、插入、删除等基本运算 实现单链表的输入、输出运算 实现单链表的逆置、归并、...

  • 链表

    一、单向链表 单向链表的普通实现 Java实现: Kotlin实现: 单向链表的递归实现 Java实现: 二、双向...

  • 25_静态单链表的实现

    关键词: 单链表的一个缺点、静态单链表设计思路、静态单链表的继承层次结构、静态单链表的实现思路、静态单链表的实现 ...

网友评论

      本文标题:单链表实现直接插入排序(JAVA)

      本文链接:https://www.haomeiwen.com/subject/lcybvftx.html