排序算法的C++ && Python实现---希尔排序(缩小增量排序)
2017-04-27 10:43
537 查看
算法思想
希尔排序是在直接插入排序的基础上进行改进。直接插入排序时每次数据间间隔总为1,遍历整个序列,而希尔排序时每次数据间间隔分别为n/2、n/4、…、1,然后再对每一个分组数据进行直接插入排序,当间隔小于1时,表明排序完成。
C++代码(VS2012):
3 Python代码(Python 2.7)
希尔排序是在直接插入排序的基础上进行改进。直接插入排序时每次数据间间隔总为1,遍历整个序列,而希尔排序时每次数据间间隔分别为n/2、n/4、…、1,然后再对每一个分组数据进行直接插入排序,当间隔小于1时,表明排序完成。
C++代码(VS2012):
//打印排序结果函数 void Print(int a[],int n,int i=0) { //cout<<i<<endl; cout<<"排序后的结果为:"<<endl; for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; } //希尔排序(缩小增量排序),不稳定排序 void ShellInsertSort(int a[],int n,int dk)//函数输入参数---数组a存有待排序数据,n为数据个数,dk为间隔增量 { for(int i=dk;i<n;i++) { if(a[i]<a[i-dk]){ int j=i-dk; //存坐标 int x=a[i]; //哨兵,存参考值 a[i]=a[i-dk]; //首先后移一个元素 while(x<a[j]){ a[j+dk]=a[j]; j-=dk; } a[j+dk]=x; } Print(a,n,i); } } void ShellSort(int a[],int n) { int dk=n/2; while(dk>=1) { ShellInsertSort(a,n,dk); dk=dk/2; } }
3 Python代码(Python 2.7)
'''输出排序结果函数''' def Print(ddata): n=len(ddata) for i in range(n): print ddata[i], #其中","为了不让其输出默认的换行符 '''插入排序---希尔排序''' def ShellInsertSort(data,dk,n): for i in range(dk,n): if(data[i-dk]>data[i]): j=i-dk ShaoBing=data[i] while(ShaoBing<data[j]): data[j+dk]=data[j] if(j<0 and (data[j]==data[j+dk])): #由于Python列表有负索引,此处为了避免索引值 break j-=dk data[j+dk]=ShaoBing return data def ShellSort(data): n=len(data) dk=n/2 while(dk>=1): ShellInsertSort(data,dk,n) dk=dk/2 Print(data)
相关文章推荐
- 排序算法的C++ && Python实现---选择排序
- 算法导论-排序的Python&C++简单实现
- 排序算法(八)希尔排序(缩小增量排序)
- C++实现常用排序算法(快速排序、冒泡排序、希尔排序、折半插入排序、直接插入排序)
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 用C++实现七种排序算法,可选择排序方法,简单易懂。
- 排序算法--选择排序C++实现
- 快速排序的c++实现 和 python 实现
- 排序算法用C++的基本算法实现十个数排序
- 排序算法(二)_希尔排序、快速排序、归并排序的Java实现
- 插入排序——直接插入排序和希尔排序,C++代码实现
- C#实现所有经典排序算法(选择排序,冒泡排序,快速排序,插入排序,希尔排序)
- 希尔排序 缩小增量排序
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- python排序算法的实现-快速排序
- 几种基本的排序算法(选择排序,冒泡排序,快速排序,归并排序,希尔排序)C语言实现
- C++各种常见排序算法 冒泡排序,插入排序,快排序,选择排序,希尔排序
- 【排序算法】选择排序(C++实现)