<Algorithm算法>笔记:元素排序(2)——希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍,看上一个笔记:<Algorithms算法>笔记:元素排序(1)——简单排序 希尔排序是这是本课程中出现的第一个非平凡的排序算法. 希尔排序思想 希尔的思想也很简单就是一个h-sort的插入算法——每相邻h个元素进行插入排序 为什么是插入排序? 如果h比较大,那么子数组会很小,用插入效率高 如果h…
首先是算法实现文件Sort.h.代码例如以下: <pre name="code" class="java">/* * 实现了八个经常使用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 * 以及高速排序.归并排序.堆排序和LST基数排序 * @author gkh178 */ #include <iostream> template<class T> void swap_value(T &a, T &b) { T…
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,a[10]; for(i=0;i<10…
1 .插入排序的过程如同我们平时打扑克牌取牌插入的过程,不断将取出的扑克牌插入已经排好的地方. 插入排序过程初始有序区间大小为1,取出无序区间的首元素,查找有序区间的合适位置,进行插入.不断重复上述过程,即可完成操作. 图解示例 //插入排序 //karllen @2015 void insertSort() { int i ,j ,temp; ;i<n;++i) //从第二个元素开始插入 { temp = a[i]; //a[i]会被覆盖,临时保存 j = i - ; &&a[j]…
前言 本篇博客是在伍迷兄的博客基础上进行的,其博客地址点击就可以进去,里面好博客很多,我的排序算法都来自于此:一些数据结构方面的概念我就不多阐述了,伍迷兄的博客中都有详细讲解,而我写这些博客只是记录自己学习过程,加入了一些自己的理解,同时也希望给别人提供帮助. 前提故事 骚年在上次与博主进行了直接插入排序的讨论后,找到了博主,说:“博主,对于直接插入排序,我有重大的发现”,博主想了想,就问:“什么发现?”,骚年:“我发现了如下两点” 1)当序列的个数比较少时,直接插入排序效率高:这个好理解,个数…
希尔算法简介                                                                                                                                        常见排序算法一般按平均时间复杂度分为两类:O(n^2):冒泡排序.选择排序.插入排序O(nlogn):归并排序.快速排序.堆排序 简单排序时间复杂度一般为O(n^2),如冒泡排序.选择排序.插入排序等高级排序时间复杂…
1. 希尔排序的原理: 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. 在上面这幅图中: 初始时,有一个大小为 10 的无序序列. 在第一趟排序中,我们不妨设 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组. 接下来,按照直接插入排序的方法对每个组进行排序. 在第二趟排序中,我们把上次的 gap 缩小一半,即 gap2 =…
希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因D.L.Shell于1959年提出而得名. 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率. 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位. 为更加清晰地说明该排序,贴一张其它地方转载而来的图片…
原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序按照此规律直到全部参与了排序.然后将间隔约定为4-1=3,然后继续进行如上的排序方法.具体过程如下: 9 1 2 3 0 4 5 7 6 8 Setp 1 经过间隔为4排序后变成 : 0 1 2 3 6 4 5 7 9 8 Setp 2 经过间隔为3排序后变成 : 0 1 2 3 6 4 5 7 9…
原创博文,转载请注明出处! 本文代码的github地址 # 基本思路       希尔排序是”直接插入排序“的改进版,也称为“缩小增量排序”.基本原理:先将待排序的数组元素分成多个序列,然后对每个子序列分别进行直接插入排序,最后再对所有元素进行一次直接插入排序. # C++代码 #include<iostream> #include<vector> using namespace std; void ShellSort(vector<int>vec) { // 希尔排序…