希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 希尔排序实质上是一种分组插入方法。它的基本思想是:对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序...
分类:
编程语言 时间:
2015-01-13 11:58:03
阅读次数:
202
希尔排序
基本思想:先将整个待排序列分割成若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。
代码实现:
#include
#include
using namespace std;
int n;
void ShellInsert(int a[],int k)
{
int i,j;
for(i=k+1;i<=n;i++) ...
分类:
编程语言 时间:
2015-01-12 11:34:04
阅读次数:
176
新博客开张,就拿排序算法开张吧。。。我尽量从最简单的排序算法开始,不定期连载更新中~ps:在我学会JAVA和C++之前,程序都用C来写吧,水平有限,大家凑和着看吧 重点是算法!~(图片来源于网络)目录:1.插入排序——直接插入排序。2.插入排序——希尔排序。3.选择排序——简单选择排序。4.选择排序...
分类:
编程语言 时间:
2015-01-10 23:32:52
阅读次数:
188
稳定性:
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,
冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
复杂度
冒泡法: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。不说了。
直接插入排序:O(n*n)
希尔排序:算法的复杂度为n的1.2次幂
选择排序:O(n*n)
快速排序:不稳定,平均时间复杂度O(nlog...
分类:
编程语言 时间:
2015-01-10 01:09:47
阅读次数:
222
第一篇博客实现了三种最基本最简单的排序算法,本篇文章将在这三种算法的基础上稍微演变一下。
1.快排
光从名字看就知道速度肯定不差,前一篇讲的冒泡排序,怎么看都不算是一种好的排序算法,里面充斥了太多的无谓的交换动作,时间复杂度倒是很稳定o(n^2),但对于排序算法实在说不过去。快排是冒泡排序的改进版,思路就是分治,将一个序列随机按照某个值分成两个子序列,子序列A里面的值全部比该值大,另一个子序列...
分类:
编程语言 时间:
2015-01-09 23:47:36
阅读次数:
443
编写完成重点数据结构和算法: 0.链表 1.栈 2.队列 3.二叉树数据结构和构建 4.前序中序后序遍历二叉树 5.构建哈夫曼树(最优二叉树) 6.图数据结构,图的深度优先遍历和广度优先遍历 7.拓扑排序 8.直接插入排序 9.希尔排序 10.希尔排序 11.冒泡排序 12.快速排序 13.直接选择...
分类:
其他好文 时间:
2015-01-07 01:50:00
阅读次数:
205
插入类排序:1:直接插入排序O(n^2)
2:折半插入排序O(n^2)
3:希尔排序 O(n乘以log以2为底,n的对数)
空间复杂度都是O(1)
//直接插入排序
void InsertSort(int R[],int n)
{
int i,j;
int tmp;
for(i=1;i<n;i++)//数组下标从0开始,第一个有序,所以从1...
分类:
编程语言 时间:
2015-01-06 18:07:39
阅读次数:
169
排序算法注意点:
插入类排序:1:直接插入排序O(n^2)
2:折半插入排序O(n^2)
3:希尔排序 O(n乘以log以2为底,n的对数)
空间复杂度都是O(1)
交换类排序:1:冒泡排序O(n^2),空间复杂度O(1)
2:快速排序O(n乘以log以2为底,...
分类:
编程语言 时间:
2015-01-06 18:03:00
阅读次数:
165
留着给自己用吧... public class FanXingHelper where T:IComparable { /// /// 冒泡排序算法 /// /// public T[] MaoPao(T[] arra...
分类:
编程语言 时间:
2015-01-04 15:07:55
阅读次数:
150
Shell排序算法的时间复杂度分析比较复杂,实际所需的时间取决于各次排序时增量的个数和增量的取值。研究证明,若增量的取值比较合理,Shell排序算法的时间复杂度约为O(n(ldn)2)。由于Shell排序算法是按增量分组进行的排序,所以Shell排序算法是一种不稳定的排序算法。
分类:
编程语言 时间:
2015-01-03 14:37:08
阅读次数:
230