数据结构与算法——直接插入排序

好久没写博客了,今天就简单总结下直接插入排序。

什么是直接插入排序?

直接插入排序就是将某一个元素与顺序表中元素进行比较,然后插入到相应的位置,使整个顺序表处于有序状态。有关数据结构的书上都会用扑克牌进行比喻说明,就跟玩扑克一样,当我们拿到几张牌时,要想整理成一个顺子,我们通常的做法就是将小的牌,插到比他大的牌的前面。具体可以看看书,想一想,还是很容易理解的。

直接插入排序的思路:每次将一个待排序的元素按照其关键码的大小插入到一个已经排好序的有序序列中。

直接插入排序有两个基本问题:

  • 如何构造一个初始有序序列。
  • 如何在有序序列中查找插入点。

具体实现:

<span style="font-family:Courier New;font-size:14px;">#include <iostream>
#define MAXSIZE 10
using namespace std;
struct SqList{
    int r[MAXSIZE+1]; //用于存储要排序的数组 r[0]用作哨兵
    int length;   //顺序表的长度
};

void InsertSort(SqList *L) {
    int j;
    for(int i=2;i<=L->length;i++) {
        //元素比较
        if(L->r[i]<L->r[i-1]) {
            L->r[0] = L->r[i]; //将此元素赋值给哨兵
            for(j=i-1;L->r[j]>L->r[0];j--) {
                L->r[j+1] = L->r[j]; //后移
            }
            L->r[j+1] = L->r[0];  //将待插元素放到指定位置
        }
    }
}

void Print(SqList *L) {
    for(int i=1;i<=L->length;i++) {
        cout<<L->r[i]<<" ";
    }
}
int main()
{
    SqList L = {{0,6,8,3,11,7},5};
    InsertSort(&L);
    Print(&L);
    return 0;
}
</span>
时间: 2024-10-12 18:03:20

数据结构与算法——直接插入排序的相关文章

[数据结构和算法]折半插入排序算法笔记

/// <summary> /// 步骤: /// 1.记录当前待排元素 /// 2.标记顺序表有序查找区域下界和上界 /// 3.在顺序表有序查找区域中折半查找等待排序元素的位置 /// 4.把顺序表有序查找区域的某些元素后移一位,以空出位置给等待排序的元素 /// 5.在空出的位置填写当前排序元素 /// </summary> /// <param name="elements"></param> static void SqList

【 python 学习笔记 -- 数据结构与算法 】插入排序 Insertion Sort

[插入排序]:每次保证列表最左端子序列是排好顺序的,然后取下一个元素,扫描其左端的子序列,将其中大于目标元素的元素右移一个位置,直到找到合适的位置将目标元素插入子序列中.逐步增大排序完成的sublist的长度,最终完成整个列表的排序 算法思路如下: 1. 列表最左边第一个元素认为已经排序好了 2. 取下一个元素(目标元素),在它前面已经排序完成的子序列中从后向前扫描 3. 如果子序列中被扫描的当前元素大于目标元素,则将当前元素右移一个位置 4. 重复第3步,直到被扫描的元素小于或等于目标元素 5

【数据结构与算法】—— 插入排序

插入排序(Insertion sort)是一种简单直观且稳定的排序算法.如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间

【数据结构与算法】插入排序

public class InsertionSort { public static void sort(Integer[] array) { if (array == null || array.length == 0) { return; } Integer value = null; Integer tempIndex = null; for (int i = 1; i < array.length; i++) { value = array[i]; tempIndex = i - 1;

数据结构精要------直接插入排序和希尔排序算法

上篇总结中主要实践了算法的内排序的选择排序,那么接下来我们继续实践插入排序排序的两种:直接插入排序和希尔排序算法. -----直接插入排序 package com.sort; /** * 直接插入排序 * * @author weixing-yang * * 算法思路: * 每步将一个待排序的元素,插入到前面已排序好的一组元素中的适当位置, * 直到所有元素全部出入完成为止. */ public class InsertionSort { public void insertionSort(in

【数据结构与算法】直接插入排序

直接插入排序的时间复杂度的O(N^2),空间复杂度是O(1). 下面是代码: /** * 源码名称: InsertionSort.java * 日期:2014-08-11 * 程序功能:直接插入排序 * 版权:[email protected] * 作者:A2BGeek */ public class InsertionSort { public void insertionSort(int[] in) { int length = in.length; int i, j; for (i = 1

《数据结构与算法之美》——冒泡排序、插入排序、选择排序

排序,是每一本数据结构的书都绕不开的重要部分. 排序的算法也是琳琅满目.五花八门. 每一个算法的背后都是智慧的结晶,思想精华的沉淀. 个人觉得排序算法没有绝对的孰优孰劣,用对了场景,就是最有的排序算法. 当然,撇开这些业务场景,排序算法本身有一些自己的衡量指标,比如我们经常提到的复杂度分析. 我们如何分析一个算法? 排序算法的执行效率 1.最好.最坏和平均情况的时间复杂度 2.时间复杂度的系数.常数和低阶 一般来说,在数据规模n很大的时候,可以忽略这些,但是如果我们需要排序的数据规模在几百.几千

JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 之所以把冒泡排序.选择排序.插入排序放在一起比较,是因为它们的平均时间复杂度都为 O(n2). 请大家带着问题:为什么插入排序比冒泡排序更受欢迎 ?来阅读下文. 2. 如何分析一个排序算法 复杂度分析是整个算法学习的精髓. 时间复杂度: 一个算法执行所耗费的时间. 空间复杂度:

【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)

转载请注明出处:http://blog.csdn.net/ns_code/article/details/20043459   前言 本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃了这个念头,斟前酌后,还是觉得分开来写比较好,具体原因,看完本篇博文也就自然明了了. 本篇文章主要探讨插入排序和希尔排序,之所将二者放在一起,很明显,是因为希尔排序是建立在插入排序的基础之上的.     注:以下各排序算法的N种实现方法大部分都是我根据算法思想,自己写出来的,或者是参考其本身的经典实