希尔排序 堆排序 归并排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序 堆排序 归并排序相关的知识,希望对你有一定的参考价值。
希尔排序(by Donald Shell):
假定给了一个需要排序的数组并且 按照5-间隔的方式进行排序 附图如下
我们 慢慢的按照 越来越小的间隔开始去排序 (最后只能是间隔为1).
堆排序:
先回顾一下插入排序
void Selection_Sort ( ElementType A[], int N ) { for ( i = 0; i < N; i ++ ) { MinPosition = ScanForMin( A, i, N–1 ); //对应的也是一个for循环 没有最好最坏情况.
// 所以一个 排序算法 的好坏就决定于上面的 寻找最小 数的 好坏
//所以我们如何找到最小元呢? 还是出去说吧.里面占地方.
/* 从A[i] 到A[N–1] 中找最小元,并将其位置赋给MinPosition */ Swap( A[i], A[MinPosition] ); /* 置 将未排序部分的最小元换到有序部分的最后位置 */ } }
雷迪森 按的 箭头们 有没有想到 堆排序?
如果这样做的话 我们就开启了一个堆排序....
void Heap_Sort ( ElementType A[], int N ) { for ( i=N/2; i>=0; i-- ) /* BuildHeap */ PercDown( A, i, N ); for ( i=N-1; i>0; i-- ) { Swap( &A[0], &A[i] ); /* DeleteMax */ PercDown( A, 0, i ); } }
定理:堆排序处理N个不同元素的随机排列的平均比较次数是个不同元素的随机排列的平均比较次数是2N logN ? ? O(Nlog logN) 。
? 虽然堆排序给出最佳平均时间复杂度,但实际效果不如用虽然堆排序给出最佳平均时间复杂度,但实际效果不如用
Sedgewick 增量序列的希尔排序。
以上是关于希尔排序 堆排序 归并排序的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 数据结构与算法之美 - 归并排序快速排序希尔排序堆排序
C# 各种内部排序方法的实现(直接插入排序希尔排序冒泡排序快速排序直接选择排序堆排序归并排序基数排序)
C# 各种内部排序方法的实现(直接插入排序希尔排序冒泡排序快速排序直接选择排序堆排序归并排序基数排序)
直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚