希尔排序
来源:互联网 发布:tensorflow支持显卡 编辑:程序博客网 时间:2024/05/22 07:40
排序算法之希尔排序(ShellSort)
希尔排序是插入排序的升级,又称为递减增量排序算法,是不稳定的排序算法。
希尔排序是基于插入排序的以下两点性质而提出改进方法的:
- 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
- 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位
以23, 10, 4, 1的步长序列进行希尔排序。
#include<stdio.h>#include<stdlib.h>//定步长//各组内插入排序void ShellSort(int a[],int nlen){int i,j,k,temp;int nGap;if(a==NULL ||nlen <=0) return ;//定步长for(nGap=nlen/2;nGap>=1;nGap/=2){for(i=0;i<nGap;i++){for(j=i+nGap;j<nlen;j+=nGap){k=j-nGap;temp=a[j];while (a[k] > temp && k>=0){a[k+nGap]=a[k];k-=nGap;}a[k+nGap]=temp;}}}}//-------------代码优化void ShellSort2(int a[],int nlen){int i,k,temp;int nGap;if(a==NULL || nlen <= 0) return ;//定步长for(nGap=nlen/2;nGap>=1;nGap/=2){for(i=nGap;i<nlen;i++){//插入排序k=i-nGap; //有序数组最后一个temp=a[i]; //无序数组最后一个while (a[k]>temp && k>=0){a[k+nGap] = a[k]; //有序数组后移k-=nGap; //向前遍历}a[k+nGap]=temp;}}}int main(){int a[]={2,1,3,4,5,11,7,0,9};int n = sizeof(a)/sizeof(a[0]);int i=0;ShellSort2(a,n);for(i=0;i<n;i++){printf("%d ",a[i]);}printf("\n");system("pause");return 0;}
阅读全文
0 0
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- tiny6410的yaffs2文件系统的制作及其安装(2)
- 干货分享:让你分分钟学会JS闭包
- CSU-1592 石子归并(区间dp)
- 新人报道
- intellij IDEA 搭建基于 Gradle 的 Spring 项目
- 希尔排序
- java Http
- c++的入门知识
- C++每日一课(十四)
- InterFile 3.3
- Java 8 并发之同步与锁
- linux 系统管理
- POSIX 信号量和互斥锁
- responseBody之Date转json