希尔排序(ShellSort)
2017-04-18 10:38
281 查看
//希尔排序:缩小增量排序 //关键:增量序列的选择。不同的序列会影响算法的最坏运行时间 //shell增量:ht=N/2(取下届),下届为(N^2) //Hibbard增量:1,3,7,...2^k-1,最坏运行时间下届为(N^3/2) //对于增量hk,所有相隔hk的元素都被排序 //编程简单,运行时间分析复杂 //本例使用shell增量 #include <iostream> using namespace std; void ShellSort(int*a, int N); void ShellSort(int*a, int N) { int i, j, Increment, tmp; int k=0;//定义变量k用来查看每次Increment,可以发现增量递减,最后都可以到达1 for(Increment = N/2; Increment > 0; Increment/=2){ k++; cout<<Increment<<' '<<k<<endl; for(i = Increment; i < N; i++){ tmp = a[i]; for(j = i; j >= Increment; j -= Increment){ if(tmp < a[j-Increment]) a[j] = a[j-Increment]; else break; } //在上层for循环结束后,存在两种情况 //tmp比它之前所有距离为Increment的数都小,则将tmp插入到最前面 //遇到break;意味着,tmp>a[j-Increment],则将tmp插入a[j] a[j] = tmp; } } } int main() { int arr[12]={3,4,5,6,24,13,26,1,2,27,38,15}; ShellSort(arr, 12); for(int i; i <12; i++){ cout<<arr[i]<<' '; } }
相关文章推荐
- 用java 和 python将希尔排序Shell's Sort 的每一步打印出来(每次的增量没有固定规则)
- 【排序算法 】希尔排序 shell sort(插入类排序)
- 希尔排序(shell sort):c++
- 排序——希尔排序(Shell Sort)
- 常见排序算法 - 希尔排序 (Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shellsort)算法实现
- 算法----希尔排序(shell sort)
- 插入排序之希尔排序(Shell Sort)
- 排序算法之希尔排序(ShellSort)
- PHP排序算法之希尔排序(Shell Sort)实例分析
- 希尔排序(shellsort)算法实现
- 希尔排序(shell sort)
- 希尔排序(Shellsort)简介
- 希尔排序(shell sort)
- 希尔排序(shellsort)
- 希尔排序(Shell Sort)
- 排序算法---希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- Shell Sort 希尔排序