算法分析:
插入排序的一个扩展是希尔排序,那么运用面向对象的思想,希尔排序就是插入排序的一个泛化.反过来看,插入排序就是希尔排序的一个特化,也就是说插入排序是一种特殊的希尔排序(间距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),直接选择...
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...
- 希尔排序(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); ...
sort.DirectInsert √ 折半查找排序 O(n2) sort.HalfSearchInsert √ 希尔排序 O(n2) sort.Shell √ 归并排序 O(nlogn) sort.Merge √ 快速排序 O(n) sort.Quick √ 堆排序 O(nlog2n) sort.Heap √ 冒泡排序 比较...
是归并排序和插入排序的混合算法。(留坑……还没搞懂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 ...
∷相关函数: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 ...
插入排序 Insert.php 快速排序 Quick.php 堆排序 Heap.php 希尔排序 Shell.php 归并排序 Merge.php 计数排序 Count.php 桶排序 Bucket.php LeetCode 题库 Leetcode/ 001 两数之和 001_two_sum.php 002 两数相加 002_...
∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进...
∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进...
∷相关函数:ShellSort函数 1.5.7 冒泡排序 243 范例1-83 冒泡排序 243 ∷相关函数:bubble_sort函数 1.5.8 一趟快速排序 246 范例1-84 一趟快速排序 246 ∷相关函数:QSort函数 1.5.9 一趟快速排序的改进...