`
wsql
  • 浏览: 11787998 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Insert Sort & Shell Sort(插入排序和希尔排序)

 
阅读更多

算法分析:

插入排序的一个扩展是希尔排序,那么运用面向对象的思想,希尔排序就是插入排序的一个泛化.反过来看,插入排序就是希尔排序的一个特化,也就是说插入排序是一种特殊的希尔排序(间距alternation为1).

插入排序的原理:

假设一个数组array的前n项是有序的(从小到大),那么,它的第n+1项只需要向前遍历,当他遇到一个数据array[m]比他小的时候,那么,将array[n+1]插入到array[m]和array[m+1]之间,就可以保证array的前n+1项是有序的.

希尔排序的原理:

希尔排序的基础仍然是插入排序,但是,希尔排序增加了alternation的概念.

举例说明:

long[] array = {3, 8, 2, 4, 9, 6, 5, 2, 7, 0}; 在希尔排序中,第一次,让间隔为4, 我们就首先对{array[0], array[4], array[8]}, {array[1], array[5], array[9]}, {array[2], array[6]}, {array[3], array[7]}这几组数据排序,这样排序之后,array={3, 0, 2,4, 7, 6, 5, 2,9, 8};可以看出, 我们复制了更少的次数, 但是,每个数据距离它的最终位置却要近了很多(相比插入排序的alternation=1). 然后做一次alternation=1的希尔排序(也就是插入排序), 就可以得到最终结果.

测试结果:

插入排序:一万条数据230毫秒左右.三万条数据2200毫秒左右. 使用范围: 一万条数据以内.

希尔排序:500万条数据6000毫秒左右.100万条数据1000毫秒左右. 50万数据500毫秒左右. 由此可以看出, 希尔排序是比较稳定的, 在数据量比较大的时候,大概1000条数据1毫秒. 推荐使用范围: 50万条数据以内.

以下粘贴插入排序和希尔排序的代码:

插入排序:

插入排序的测试代码:

希尔排序:

希尔排序的测试代码:

分享到:
评论

相关推荐

    数据结构各种内排序操作

    1、随机产生100个整数2、使用不同的内排序方法对其排序包括直接插入排序 (Insert Sort),折半插入排序 (Binary Insertsort),希尔排序 (Shell Sort),改进起泡排序 (Bubble Sort),快速排序 (Quick Sort),直接选择...

    用c实现的快排、插入、希尔、堆、冒泡、选择、归并排序

    void insert_sort(sqlist *l); //直插 void shell_sort(sqlist *l); //希尔排序 void quick_sort(sqlist *l, int low, int high); //快排 的封装 *****重要 int parttion(sqlist *l, int low, int high); //一趟快排...

    各种排序 冒泡 快速 堆 希尔 基数等九种

    // 将 堆顶记录和当前未经排序子队列(1——i)中 的 最后一个记录 交换 L.r[i]=L.r[1]; L.r[1]=L.r[0]; Heap_Adjust(L,1,i-1);// 将(1——i-1)重新调整为一个大堆 } } void Merge( RedType S[], RedType...

    基于PHP的基本排序算法(快速排序、堆排序、基数排序等)

    - 希尔排序(Shell Sort) - 冒泡排序(Bubble Sort) - 快速排序(Quick Sort) - 选择排序(Selection Sort) - 堆排序(Heap Sort) - 归并排序(Merge Sort) - 箱排序(Bin Sort) - 基数排序(Radix Sort)

    各种排序算法

    //cout<<"insert_sort"; //insert_sort(array,10); //cout<<"heap_sort"; //heap_sort(array,10); //cout<<"quik_sort"; //quik_sort(array,0,9); //cout<<"merge_sort"; //merge_sort(array,0,9); ...

    leetcode数组下标大于间距-Algorithm:算法

    sort.DirectInsert √ 折半查找排序 O(n2) sort.HalfSearchInsert √ 希尔排序 O(n2) sort.Shell √ 归并排序 O(nlogn) sort.Merge √ 快速排序 O(n) sort.Quick √ 堆排序 O(nlog2n) sort.Heap √ 冒泡排序 比较...

    leetcode凑硬币-Arithmatic:算术

    是归并排序和插入排序的混合算法。(留坑……还没搞懂timSort) 参考资料: 1, 概要的讲解timsort的实现以及timsort的bugs,因为是视频,所以相比论文我觉得更快看得懂,没字幕,听不懂怎么办,没事,演讲者有一个...

    数据结构算法实现(严蔚敏版配套实现程序)

    ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进算法 248 ...

    数据结构 严蔚敏 代码

    ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进算法 248 ...

    数据结构(王)c元代码

    ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进算法 248 ...

    数据结构算法实现(严蔚敏版配套实现程序)

    ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进算法 248 ...

    leetcode下载-algorithm_base:简单算法基础练习

    插入排序 Insert.php 快速排序 Quick.php 堆排序 Heap.php 希尔排序 Shell.php 归并排序 Merge.php 计数排序 Count.php 桶排序 Bucket.php LeetCode 题库 Leetcode/ 001 两数之和 001_two_sum.php 002 两数相加 002_...

    C语言通用范例开发金典.part1.rar

    ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进...

    C语言通用范例开发金典.part2.rar

    ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进...

    C 开发金典

    ∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进...

Global site tag (gtag.js) - Google Analytics