1. 引入 — 简单插入排序存在的问题 现在有这么一个数组,arr = {2,3,4,5,6,1};这时需要插入的数 1(最小),过程是: {2,3,4,5,6,6} → {2,3,4,5,5,6} → {2,3,4,4,5,6} → {2,3,3,4,5,6} → {2,2,3,4,5,6} → ...
分类:
编程语言 时间:
2020-02-18 20:19:35
阅读次数:
71
一、基本介绍 ? 希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更加高效的版本,也称为缩小增量排序。 ? 在排序过程中,把待排序数据按照一定增量分组,对每组数据使用直接插入排序算法进行排序;随着增量的减小,每组的数据越来越多;当增量减少为 1 时,整个数据被分为一组,算法终止,排序完成 ...
分类:
编程语言 时间:
2020-02-17 19:55:50
阅读次数:
87
一、介绍 插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 二、代码 三、代码 小小插入?奇幻思维 ...
分类:
编程语言 时间:
2020-02-17 19:27:26
阅读次数:
83
算法之排序二 四、冒泡排序与插入排序 为何在实际中倾向于使用插入排序而不是冒泡排序,尽管它们的时间复杂度都是O(n2),而且也都是稳定的。看一下两个算法在交换元素数值的处理上就知道了。对于冒泡排序,交换两个元素时需要引入中间变量,也就是如果需要交换 A 和 B,我们需要让 A 赋值给 C,然后让 A ...
分类:
编程语言 时间:
2020-02-17 14:24:34
阅读次数:
86
https://www.runoob.com/w3cnote/radix-sort.html 算法系列 1.0 十大经典排序算法 1.1 冒泡排序 1.2 选择排序 1.3 插入排序 1.4 希尔排序 1.5 归并排序 1.6 快速排序 1.7 堆排序 1.8 计数排序 1.9 桶排序 1.10 基 ...
分类:
编程语言 时间:
2020-02-17 12:27:17
阅读次数:
57
笔者埋坑后面再来分析总结 1. 插入排序 直接插入排序:O(n^2) 二分插入排序:O(n^2) 希尔排序:O(nlog n) 2. 交换排序 冒泡排序:O(n^2) 快速排序:O(nlog2 n) java public static void SimpleSelectSort(int[] arr ...
分类:
编程语言 时间:
2020-02-17 01:18:02
阅读次数:
88
只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。 ...
分类:
编程语言 时间:
2020-02-16 16:30:07
阅读次数:
77
一、分治算法 分而治之,即把原问题分割成同等结构的子问题,之后针对子问题逐一解决。 插入排序更关心的是治。 归并排序更关心的是分,如何均匀分的问题。 二、分治算法应用 求逆序数 1. 什么是逆序数? 排在前面的元素比后面大。例如:序列 3 5 6 8 1 ;8排在1前面,但是8 > 1。逆序数反映的 ...
分类:
编程语言 时间:
2020-02-15 21:45:56
阅读次数:
86
直接插入排序:通过构建有序序列,对于未排序数据,选出第一个元素,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序因而在从后向前扫描过程中, 需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 我们可以吧一个序列分为有序区段和无序区段,如图: #include<bits/stdc++. ...
分类:
编程语言 时间:
2020-02-13 19:16:01
阅读次数:
72