标签:
希尔排序(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 增量序列的希尔排序。
标签:
原文地址:http://www.cnblogs.com/A-FM/p/5158598.html