算法分析(1):插入排序

  买了一本算法导论,利用闲散的时间,学习算法分析。语言使用C++,顺便练习C++语言特性。

  

  插入排序:对于少量元素的排序,这是一个有效的算法。下面根据一个例子来分析,它排序的原理。

  对于一个vector:

vector<int> numbers = { 31, 41, 50, 26, 68, 2, 324, 123, 4 };

  先上代码:

for (int i = 1; i < numbers.size(); ++i)
    {
        key = numbers[i];
        j = i - 1;
        while (j >= 0 && numbers[j] < key)
        {
            numbers[j + 1] = numbers[j];
            j -= 1;
        }
        numbers[j+1] = key;
        for (auto &it : numbers)
            cout << it << "\t";
        cout << endl;
    }

  变量i表示当前需要被插入的元素,当i从1到N-1(N为元素总数)迭代时,总有numbers的第0到第i-1个元素是按序排列的。

  上面的代码,会将每次迭代的结果显示,方便理解算法原理。

  

时间: 2024-08-13 21:25:16

算法分析(1):插入排序的相关文章

排序算法总结之折半插入排序

基本思想 折半插入排序是对直接插入排序的简单改进,对于直接插入排序而言,当第i-1趟需要将第i个元素插入前面的0~i-1个元素序列中时,总是需要从i-1个元素开始,逐个比较每个元素,直到找到它的位置.这显然没有利用前面0~i-1个元素已经有序这个特点,而折半插入排序则改进了这一点. 对于折半插入排序而言,当需要插入第i个元素时,它不会逐个进行比较每个元素,而是: (1)计算0~i-1索引的中间点,也就是用i索引处的元素和(0+i-1)/2索引处的元素进行比较,如果i索引处的元素值大,就直接在(0

插入排序 &amp; 快速排序

插入排序: 接口定义: int insert_sort(void* data, int size, int esize, int (*compare)(const void* key1, const void* key2)); 返回值:成功 0:失败 -1. 算法描述: 每次从待排序数据集中取出第一个元素,将其插入到有序数据集中,两个数据集共用一块存储空间.两个数据集都存放在data中,data包含size个无序元素,每个元素的大小为esize,函数指针compare指向一个比较元素大小的用户自

(3)排序之直接插入排序

参考:http://www.cnblogs.com/jingmoxukong/p/4303270.html 要点 直接插入排序是一种最简单的插入排序. 插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成. 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程. 先拿一张5在手里, 再摸到一张4,比5小,插到5前面, 摸到一张6,嗯,比5大,插到5后面, 摸到一张8,比6大,插到6后面, ... 以上的过程,其实就是典型的直接插入排序,每次将一个新

排序三 直接插入排序

要点 直接插入排序是一种最简单的插入排序. 插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成. 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程. 先拿一张5在手里, 再摸到一张2,比5小,插到5前面, 摸到一张6,嗯,比5大,插到5后面, 摸到一张3,插到2和5之间, ... 最后一看,我靠,凑到全是同花顺,这下牛逼大了. 以上的过程,其实就是典型的简单插入排序,每次将一个新数据插入到有序队列中的合适位置里. 很简单吧,接下来,我们要将这

插入排序(insert_sort)与 并归排序(merge_sort) 算法分析

(一)插入排序 算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法. 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入.插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间. 算法描述: 一般来说,插入排序都采用in-place在数组上实现.具

排序算法分析【一】:插入排序(附Python&amp;C++代码)

本文除了代码是自己写的,其余部分都是已存在内容.作者只是整理归纳学习,肯定不是原创,但是不是翻译,更不是转载,所以只能标注为原创,因为代码是原创.向前辈敬礼! 一.基本概念 排序算法(Sorting algorithm):将一串数据依照特定排序方式进行排列的一种算法. 排序算法是基础中的基础,重中之重.是某些算法如搜索算法.合并算法的前置算法.排序不仅仅是对数值排序,也可以是字符串. 排序算法的要求: 1.输出结果为递增(和需要排序的目标相同): 2.输出为输入的重新排列: 相关概念:[摘自百度

Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)

一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法. 二.划分: 划分是快速排序的前提,即把数据分为两组,大于特定值的数据在一组,小于特定值的数据在另一组.快速排序即是由划分和递归操作来完成的. (1)原理: 定义一个阈值,分别从最左面和最右面向中间遍历元素,左面找到一个大于阈值的数据便停止,右边找到一个小于阈值的数据便停止,如果此时左右两边都还没

算法分析与设计复习

算法分析与设计复习 2016年初,研一上学期期末考试前,复习并总结算法分析与设计科目的内容.复习过程参照<算法导论>中文第2版,同时参照PPT,章节划分根据PPT内容 概要: 第一章 概述 第二章 插入排序&分治策略 第三章 复杂度分析 第四章 堆与堆排序 第五章 快速排序 第六章 线性时间排序 第一章 概述 算法的应用范围 算法在诸如生物等诸多领域有其应用 算法的意义 算法在很多情况下让不可能完成的事情变成了可能,让处理的很慢的过程变快. 一个铺垫 一串不全为0的数,怎么取能拿到一段

“深入理解”—插入排序算法

总结下自己对插入排序的理解. 插入排序算法思想:每趟将一个元素,按照其关键字的大小插入到它前面已经排序的子序列中,依此重复,直到插入全部元素. 插入排序包括:直接插入排序.二分插入排序以及希尔排序. 1.直接插入排序: public void insert(int[] a) { for(int i=1;i<a.length;i++) //n-1此扫描,依次向前插入n-1个元素 { int temp=a[i]; //每趟将a[i]插入到前面的排序子序列中 int j; for(j=i-1;j>=