希尔(shell)排序
2010-11-02 00:27
169 查看
shell排序的依据:把记录分成几个交替的组,使用我们熟悉的插入排序算法对每个组进行排序。
具体做法是:先取一个小于记录数据n的数h1作为第一个增量,将记录中所有距离为h的记录分为一组并在该组内进行插入排序,然后再取小于h1的第二个增量h2,对记录中所有距离为h2的记录进行插入排序。。。以此类推,知道距离h等于1(此时等同于插入排序)。
shell排序的基本特征:
shell排序不是稳定的
该算法对于初始记录不敏感,即初始记录是否有序对算法的执行效率几乎没有影响
具体做法是:先取一个小于记录数据n的数h1作为第一个增量,将记录中所有距离为h的记录分为一组并在该组内进行插入排序,然后再取小于h1的第二个增量h2,对记录中所有距离为h2的记录进行插入排序。。。以此类推,知道距离h等于1(此时等同于插入排序)。
#include "stdafx.h" #include<iostream> #include<iomanip> using std::setw; using std::cout; using std::endl; void shellinsert(int a[],int n,int k) { int i,j; int temp; for(i=k;i<n;i++) { temp=a[i]; for(j=i-k;j>=0;j-=k) { if(a[j]>temp) { a[j+k]=a[j]; } else break; } a[j+k]=temp; } } void shellsort(int a[],int n) { int k=n/2; for(;k>0;k/=2) { shellinsert(a,n,k); print(a,n); } } int _tmain(int argc, _TCHAR* argv[]) { int arr[8]={47,33,61,82,72,11,25,47}; shellsort(arr,8); return 0; }
shell排序的基本特征:
shell排序不是稳定的
该算法对于初始记录不敏感,即初始记录是否有序对算法的执行效率几乎没有影响
相关文章推荐
- Shell(希尔)排序
- 希尔(Shell)排序 Java实现
- 排序(4)---------希尔(shell)排序(C语言实现)
- 详解插入排序和优化之后的希尔(shell)排序
- 排序(4)---------希尔(shell)排序(C语言实现)
- Java实现希尔(Shell)排序
- shell(希尔)排序(改良的插入排序)
- shell(希尔)排序
- Java 详解希尔(Shell)排序
- shell(希尔)排序和插入排序简介
- 排序(3)希尔(Donald L. Shell)排序
- shell(希尔)排序
- 希尔(shell)排序
- 希尔(Shell)排序
- Java 详解希尔(Shell)排序
- 希尔(shell)排序
- 排序算法大集锦_插入类――希尔(shell)排序
- 希尔(Shell)排序
- 希尔(Shell)排序——改良的插入排序算法
- Shell(希尔)排序的分析和比较