Insertion Sort List

Sort a linked list using insertion sort.

C++代码如下:

#include<iostream>
#include<new>
using namespace std;

//Definition for singly-linked list.
struct ListNode
{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Solution
{
public:
    ListNode *insertionSortList(ListNode *&head)
    {
        if(head==NULL)
            return NULL;
        ListNode *pre=head;
        ListNode *p=head;
        ListNode *q=head->next;
        ListNode *tmp=NULL;
        head->next=NULL;
        while(q)
        {
            tmp=q->next;
            q->next=NULL;
            while(p)
            {
                if(q->val>p->val)
                {
                    pre=p;
                    p=p->next;
                }
                else
                {
                    if(p==head)
                    {
                        q->next=head;
                        head=q;
                    }
                    else
                    {
                        q->next=p;
                        pre->next=q;
                    }
                    break;
                }
            }
            if(p==NULL)
                pre->next=q;
            //每一个元素插入完成之后都要将p和pre指向头结点,从头开始比较插入
            p=pre=head;
            q=tmp;
        }
        return head;
    }
    void createList(ListNode *&head)
    {
        ListNode *p=NULL;
        int i=0;
        int arr[10]= {3,4,1,4,6,3,7,2,1,10};
        for(i=0; i<10; i++)
        {
            if(head==NULL)
            {
                head=new ListNode(arr[i]);
                if(head==NULL)
                    return;
            }
            else
            {
                p=new ListNode(arr[i]);
                p->next=head;
                head=p;
            }
        }
    }
};
int main()
{
    Solution s;
    ListNode *L=NULL;
    s.createList(L);
    ListNode *head=L;
    while(head)
    {
        cout<<head->val<<" ";
        head=head->next;
    }
    cout<<endl;
    L=s.insertionSortList(L);
    while(L)
    {
        cout<<L->val<<" ";
        L=L->next;
    }
}

运行结果:

时间: 2025-01-30 14:02:31

Insertion Sort List的相关文章

[LeetCode]147.Insertion Sort List

[题目] Sort a linked list using insertion sort. [分析] 无 [代码] /********************************* * 日期:2015-01-09 * 作者:SJF0115 * 题目: 147.Insertion Sort List * 来源:https://oj.leetcode.com/problems/insertion-sort-list/ * 结果:AC * 来源:LeetCode * 博客: ***********

Java 容器 &amp; 泛型:四、Colletions.sort 和 Arrays.sort 的算法

一.Colletions和Arrays Collentions 此类完全是服务容器的"包装器".提供了一些操作或者返回容器的静态方法.而Arrays是用来操作数组的各种方法.其中它们的联系在于其中的Sort方法,也就是这次博客的主题.   二.插入,快速.归并基本算法 ① 插入排序 {a1},{a2,a3,a4,-,an}} {{a1⑴,a2⑴},{a3⑴,a4⑴ -,an⑴}} - {{a1(n-1),a2(n-1) ,-},{an(n-1)}} 原理及记忆方法:每次处理就是将无序数

java-容器-collection的sort方法

Java中如果需要对一个collections排序,需要继承于Comparable或者comparator接口,那么使用的排序算法是什么呢,一般情况下,排序算法包括:插入排序.快速排序.合并排序.冒泡排序等,java的Collections.sort算法调用的是合并排序,它是稳定排序,当数据接近有序的时候,效率更高,collections中的数据在排序前需要输入到array中,接着调用Arrays.sort函数来完成对象排序,最近通过迭代器将数组中排好序的对象些人到collection中,这也要

Swift实现Selection Sort选择排序算法的实例讲解_Swift

选择排序Selection Sort是一种和插入排序Insertion Sort类似的排序方法,它同样只适用于对规模不大的集合进行排序.它的核心思想是,在序列内部,把序列逻辑上分成已排序和未排序两部分,不断找到未排序部分中最符合排序规则的元素,添加进已排序部分,直到序列中所有元素都已经添加到了已排序部分,此时,整个序列就排序完成了. 冒泡排序是两两比较不断交换来实现排序,所以比较繁琐. 而选择排序  则是先选择要交换的那个数,才去交换.这样就可以省去很多不必要的步骤. Swift版实现示例: f

Java数据结构及算法实例:插入排序 Insertion Sort_java

/** * 选择排序的思想: * 每次循环前,数组左边都是部分有序的序列, * 然后选择右边待排元素,将其值保存下来 * 依次和左边已经排好的元素比较 * 如果小于左边的元素,就将左边的元素右移一位 * 直到和最左边的比较完成,或者待排元素不比左边元素小 */ package al; public class InsertionSort { public static void main(String[] args) { InsertionSort insertSort = new Insert

排序算法

排序|算法 算法是程序设计的精髓,程序设计的实质就是构造解决问题的算法,将其解释为计算机语言. 在这里您可以了解到: 算法定义 伪代码的使用 算法的复杂性 算法设计策略 常用算法 这里所有的算法都以一种类似Pascal语言的伪代码描述,请参阅伪代码的使用. 新增内容 关于数论的算法--数论基本知识(May 6, 2001)动态规划重新整理 (January 15, 2001)图的深度优先遍历 (January 21, 2001) 图的广度优先遍历 (January 21, 2001)图的拓扑排序

浅谈算法和数据结构 二 基本排序算法

本篇开始学习排序算法.排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序.买火车票会按照出发时间或者时长排序.买东西会按照销量或者好评度排序.查找文件会按照修改时间排序等等.在计算机程序设计中,排序和查找也是最基本的算法,很多其他的算法都是以排序算法为基础,在一般的数据处理或分析中,通常第一步就是进行排序,比如说二分查找,首先要对数据进行排序.在Donald Knuth 的计算机程序设计的艺术这四卷书中,有一卷是专门介绍排序和查找的. 排序的算法有很多,在维基百

[AS功能代码教程10] 数据结构排序算法

一.概论 对于数据的处理工作,排序是其最基本的运算之一.在当今的计算机系统中,花费在排序上的时间占系统CPU运行时间的很大比重.有资料表明,在一些商用计算机上,在排序上的CPU时间达到20%至60%.为了提高计算机的工作效率,人们提出了各种各样的排序方法和算法.这些算法有力地发展.并充分地展示了算法设计的某些重要原则和高超技巧.因此,对于计算专业人员来说掌握排序算法是十分重要的. 二.排序算法简介 本次课程中我们将介绍六种排序方法:插入排序,选择排序,冒泡排序,希尔排序,快速排序及二路归并. <

经典算法(2) 直接插入排序的三种实现

直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已 经排好序的子序列中的适当位置,直到全部记录插入完成为止. 设数组为a[0-n-1]. 1. 初 始时,a[0]自成1个有序区,无序区为a[1..n-1].令i=1 2. 将a[i]并入当前的有序区a[0-i-1]中形 成a[0-i]的有序区间. 3. i++并重复第二步直到i==n-1.排序完成. 下面给出严格按照定 义书写的代码(由小到大排序): void Insertsort1(in