插入排序和希尔排序
2013-04-13 14:41
162 查看
本博客已迁往http://coredumper.cn
插入排序(Insert Sort)插入排序的时间性能上界为O(N2),下界为O(N),当原始数组本身就由小到大排列时,性能最好。插入排序是稳定排序算法。
插入排序适用于输入基本有序的情况。
void InsertSort( int A[], int N ) { int i, j, key; for(i = 1; i < N; i++ ){ key= A[i]; for(j = i; j >= 1; j -= 1 ){ if(key < A[j-1] ){ A[j]= A[j-1]; } else{ break; } } A[j]= key; } }
希尔排序(Shell Sort)
希尔排序就是步长逐渐缩小直到变成1的多轮插入排序,可以看到,将希尔排序最外面的for循环去掉,再将step置为1,就变成了插入排序。
步长序列step的值是可选的,不同的步长序列导致希尔排序的性能有所差异。常用的步长序列即为下面程序中给出的,初始值为N/2,然后逐次折半,直到变为1,使用这种步长序列的时间性能上界为O(N2);如果使用2k-1,……,7,3,1这个步长序列,则时间性能上界为O(N3/2)。
希尔排序是不稳定排序算法。
void ShellSort( int A[], int N ) { int step, i, j, key; for(step = N / 2; step > 0; step /= 2 ){ for(i = step; i < N; i++ ){ key= A[i]; for(j = i; j >= step; j -= step ){ if(key < A[j-step] ){ A[j]= A[j-step]; } else{ break; } } A[j]= key; } } }
相关文章推荐
- 【Java常用排序算法】插入排序(直接插入排序、希尔排序)
- 插入排序与希尔排序
- java直接插入排序和希尔排序
- 插入排序和希尔排序
- 数据结构-直接插入排序与希尔排序
- 插入排序-希尔排序
- 插入排序类:直接插入排序和希尔排序
- 插入排序之希尔排序
- 希尔排序的实质就是分组插入排序
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)
- 插入排序之希尔排序
- 插入排序:直接插入排序和希尔排序
- 直接插入排序与希尔排序
- 简单插入排序和希尔排序
- 2.排序--插入排序和希尔排序
- 插入排序之直接希尔排序Java实现
- 插入排序(直接插入排序 and 希尔排序)
- 排序-java实现的选择/插入/希尔排序
- 插入排序,希尔排序
- 排序--插入排序、希尔排序、快速排序、桶排序(代码)