shell排序: 这个排序的命名是来自发明者的名字,和排序的方法没有字面上的联系.所以不要因为名字而感觉很难.在K&R的C程序设计语言中书中只用了几行代码很简洁的实现了这个排序算法.那就来看看这个排序是如何实现的. 原理: 我们将所要排序的序列(大小为n)划分成组,组的数量一般是可以用这个序列的大小的一半来定义(也就是d = n/2),然后不断折半,而组的成员就是间隔为d的数分为一组.比如这边有个长度为8的数字序列要去排序,那我们就可以先将这个序列分成d=4组的,每个组有两个数,(这边的4就是8…
# coding=utf-8 # shell排序 # 参数alist:被被排序的列表 def shellsort(alist): gap = len(alist) / 2 while gap > 0: for i in range(gap): shellinsert(alist, i, gap) gap = gap / 2 print alist #根据步长进行插入排序 def shellinsert(alist, start, gap): for i in range(start + gap,…
#SIZE  10        //直接插入排序     void insert_sort(){           int i,j;           int array[SIZE+1];           array[]={0,12,23,11,55,2,34,18,20,48,22};           for(i=2;i<=SIZE;i++){               array[0]=array[i];               j=i-1;              …
在看<>这本书中关于排序这一章的时候,我试着用javascript语言来重写里面几个经典的排序方法,包括冒泡排序.快速排序.选择排序.插入排序还有希尔排序. 一.冒泡排序 冒泡排序算是排序中最常见的,冒泡排序分为两个,一种是从小到大,一种是从打到小,具体是实现步骤就是:从最开始的位置或者最后的位置反方向对比,如果比它大/小,就交换然后继续走,第一遍走完,最后一个位置是最大值或者最小值,时间复杂度为O(n^2),是稳定的排序,用JS实现的代码如下: //冒泡排序 function exchang…
排序:将无序的序列重新排列为有序的序列. 插入类排序 插入类排序:在一个有序的序列中,插入一个新的关键字,知道所有的关键字都插入形成一个有序的序列. 直接插入排序:首先以一个元素为有序的序列,然后将后面的元素依次插入到有序的序列中合适的位置直到所有的元素都插入有序序列. void InsertSort(ElemType A[],int n){ int i,j; ;i<=n;i++) ].key){ A[]=A[i]; ;A[].key<A[j].key;--j) A[j+]=A[j]; A[i…
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 之所以把归并排序.快速排序.希尔排序.堆排序放在一起比较,是因为它们的平均时间复杂度都为 O(nlogn). 请大家带着问题:快排和归并用的都是分治思想,递推公式和递归代码也非常相似,那它们的区别在哪里呢 ? 来阅读下文. 2. 归并排序(Merge Sort) 思想 排序一个数…
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和折半查找相结合,提高查找插入位置的速度,也就是折半插入排序,此处没有给出这种方法的相应代码. 对排序算法,可从以下几个方面评价: 时间复杂度: 空间复杂度: 稳定性. 代码(测试暂未发现问题,欢迎交流指正!): #include <iostream> #include <cassert>…
原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<:…<d2<d1),即所有记录放在同一组中进行直接插入排序为止. 该方法实质上是一种分组插入方法. 算法编码 void shellSort(int v[], int n)…
高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序大约是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希尔(shell)排序 希尔排序是基于插入排序的,首先回顾一下插入排序,假设插入是从左向右执行的,待插入元素的左边是有序的,且假如待插入元素比左边的都小,就需要挪动左边的所有元素,如下图所示: ==> 图1和图2:插入右边的temp柱需要outer标记位左边的五个柱子都向右挪动 如图3所示,相比插入排…
归并排序 归并排序是一种分治策略的排序算法.它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列. 归并排序首先由著名的现代计算机之父John_von_Neumann在1945年发明,被用在了EDVAC(一台美国早期电子计算机),足足用墨水写了 23 页的排序程序.注:冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍匈牙利数学家.计算机科学家.物理学家,是20世纪最重要的数学家之一. 一.算法介绍 我…