数据结构之希尔排序
来源:互联网 发布:直销平台软件 编辑:程序博客网 时间:2024/05/01 21:28
直接插入排序在数据量较小而且接近"正序"的时候,时间复杂度可以小至O(n),所以如果我们能够让数据量变小且变得接近"正序",然后用直接插入排序就好了。希尔排序就是做这么个事情,它首先将数据拆成几部分,即达到缩小数据规模排序,再将数据合并起来,达到整体的"正序",然而将数据的正序并非局部的"正序",即不是(6,7,8, 3,4,5, 0,1,2),而是整体的正序,所以在将数据分割成几组的时候不能一堆堆的分割,而应该跳跃式分割,用一个系数d来控制。
#include <iostream>using namespace std;
// 希尔插入,和直接插入唯一不同的是,每个元素位置相隔不是1,而是d,其他一模一样// 即只要d传入1,就是直接插入排序void shellInsert(int src[], int d,int n){// 哨岗元素int save;int j;for (int i = d; i <= n; ++i){save = src[i];// 逐个与前面(-d)的元素进行比较for (j = i; j-d>=0 && save<src[j-d]; j-=d){src[j] = src[j-d];}src[j] = save;}}
void shellSort(int src[], int n){// 每次将数据分割成几组,然后进行直接插入排序// d的选择是很重要的,质数,奇数,避免相互倍数,最后一个一定要为1// 这里的d是随便写的,没有经过仔细考虑的,查了几本数据结构的树,有一本是d=d/3+1(d初始化时为n)for (int d = (n+1)/2; d>=1; d = d/2){shellInsert(src, d, n);}}
int main(){int src[10] = {4,5,6,7,8,9,1,2,3,0};int number = 9;shellSort(src, number);for (int i = 0; i <= number; ++i)cout<<src[i]<<" ";cout<<endl;return 0;}
- 数据结构之希尔排序
- 数据结构之希尔排序
- 数据结构之希尔排序
- 数据结构之希尔排序
- 数据结构--排序之希尔排序
- 数据结构之排序:希尔排序
- 数据结构学习之 希尔排序
- python数据结构之希尔排序
- 数据结构之排序之希尔排序
- 【希尔排序】数据结构实验之排序六:希尔排序
- 【数据结构之排序3】希尔排序
- 数据结构之插入排序与希尔排序
- 数据结构之排序(四)希尔排序
- 数据结构实验之排序六:希尔排序
- 数据结构实验之排序六:希尔排序
- 数据结构实验之排序六:希尔排序
- java数据结构排序之希尔排序实现
- 数据结构实验之排序六:希尔排序
- hdu1950
- Java中的串行化
- android屏幕属性
- 黑马程序员--java技术--交通灯管理系统
- C++ 虚函数表解析
- 数据结构之希尔排序
- 去掉字符串第一个非空格字母 和最后一个非空格字母两端的空格
- Android中Preference的使用以及监听事件分析 及 PreferenceFragment 的使用
- 企业搜索引擎方案选型
- 【Maven实用技巧】02. Maven配置之pom文件配置包含和排除测试
- struct iphdr详解
- uva 991 - Safe Salutations(卡特兰数)
- 将字符串反转
- 如何在PHP上显示JFreechart?