#include <stdio.h>
#include <stdlib.h>
#include <string>

void SortGroup(int *pnData,int nLen,int nBegin,int nStep)
{
int i,j,k,nTemp;
for(i = nBegin+nStep;i<nLen;i+=nStep)
{
//寻找I的位置
for(j=nBegin;j<i;j+=nStep)
{
//如果比他小  则这里就是他的位置
if(pnData[i]<pnData[j])
{
nTemp = pnData[i];
for(k=i;k>j;k -= nStep)
{
pnData[k] = pnData[k-nStep];
}
pnData[j] = nTemp;
}
}
}
}

///希尔排序,pndata要排序的数据,nLen数据的个数
void ShellSort(int *pnData,int nLen)
{
int nStep,i;
//以nStep分组,nStep每次减为原来的一半;
for(nStep =nLen/2;nStep>0;nStep/=2)
{
//对每个分组进行排序
for(i=0;i<nStep;++i)
{
SortGroup(pnData,nLen,i,nStep);
}
}
}
int main()
{
int nData[8] = {49,38,65,97,76,13,27,49};
int i=0,len;
printf("排序前:\n");
for(i = 0;i <8;++i)
{
printf("%d ",nData[i]);
}
printf("\n");
ShellSort(nData,8);
printf("排序后:\n");
for(i = 0;i <8;++i)
{
printf("%d ",nData[i]);
}
printf("\n");
return 0;
}

希尔排序(分组插入法)相关推荐

  1. 1.11_shell_sort_希尔排序

    --- 希尔排序 ---分组插入排序算法每趟使整体数据越来越接近有序 def insert_sort_gap(li, gap):for i in range(gap, len(li)):temp = ...

  2. (排序3)希尔排序时间复杂度与直接选择排序

    TIPS 希尔排序分组预排的目的就在于比如说我要对数据进行升序排序,那么就是可以达到让大的数尽快的调到后面 然后接下来随着gap的不断缩小,间隔越来越小,组也就越来越多,最终整个数组的话是越来越接近有 ...

  3. 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)

    排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...

  4. 主要的七种排序(快排、希尔排序、堆排序、归并排序、选择排序、插入排序、冒泡排序)

    一.冒泡排序 冒泡排序是最简单的排序,不需要额外空间,时间复杂度为O(N^2):代码如下 import java.util.Arrays;public class BubbleSort {public ...

  5. 常见排序算法2–直接插入法vs希尔排序法

    常见排序算法–直接插入法vs希尔排序法 首先,我们通过一个例子来了解直接插入算法 例如,对原始数组{15,24,3,49,10}进行直接插入排序(由小到大进行排序) 第一个数15无法比较,第二个数24 ...

  6. laravel 先排序后分组怎么写_希尔排序算法拆解解析

    1先让我们回顾下插入排序 //比如有组数据:int[] arr = {8, 6, 2, 3, 1, 5, 7, 4}; 文字概述: 假设第一个元素为最小数字.那么我们就要从index=1开始往后循环, ...

  7. mysql分组后组内排序_图解排序 3/10 希尔排序

    希尔排序,它是由 D.L.Shell 于1959 年提出而得名.根据它的名字很难想象算法的核心思想.[ 所以只能死记硬背了,面试官问:希尔排序的思想是什么?].它的核心思想是把一个序列分组,对分组后的 ...

  8. 插入排序 希尔排序 C++

    最优时间复杂度为o(n),又称缩小增量排序. 逻辑分析: 1.希尔排序首先是确定增量,默认的希尔增量(不一定是最优)为length/2. 2.根据增量分组,将分组的元素利用直接插入法排序. 3.增量= ...

  9. 常用排序算法之插入排序 ( 直接插入排序、希尔排序 )

    插入排序的方法是:从初始有序的子集合开始,不断地把新的数据元素插入到已排列有序子集合的合适位置上,使子集合中数据元素的个数不断增多,当子集合等于集合时,插入排序算法结束.常用的插入排序有直接插入排序和 ...

最新文章

  1. Roadsend PHP-开源的PHP代码编译器
  2. bitcoinj开发环境搭建
  3. halcon区域腐蚀膨胀算子_超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码)。...
  4. 神雕侠侣2服务器维护,《神雕侠侣2》手游10月22日停服维护公告
  5. linux安装软件包(pip, distribute, nose, virtualenv)
  6. 崭新的2020(洛谷P5886题题解,Java语言描述)
  7. 解决phpcms模版设置中不能显示栏目首页模板,栏目列表页模板,内容页模板等下拉菜单选项的问题!...
  8. 『ORACLE』Oracle GoldenGate搭建(11g)
  9. 贝尔英才学院计算机,特稿 | 从高三的二模倒数第一到考取南京邮电大学贝尔英才学院,他仅用了半年!...
  10. Win10系统更新后旧系统清理
  11. 最新Axure激活码
  12. Spring中过滤器和拦截器
  13. 输出100以内所有的素数
  14. eclipse调成黑色主题背景(老版本适用)
  15. 浏览器 本地html 图片不显示,浏览网页图片无法显示怎么回事 网页图片显示不出来的解决方法...
  16. 论文笔记 | code representation(代码表示学习)系列
  17. 如何在没有 USB 数据线的情况下使用 Android Studio 在手机中安装 Android
  18. Unity 像机抖动效果
  19. 墙裂推荐6本适用于所有Java程序员阅读书籍
  20. 如何在VC中加减日期及 CTime COleDateTime的常用操作和比较

热门文章

  1. ZOJ Monthly, February 2012 - H Matrix (ZOJ 3578)
  2. Android APP开发字体更换
  3. 操作系统知识点精简版
  4. 微信小程序图片内容审核功能云函数+小程序端代码完整实现【填坑】
  5. 升级Xcode 10.2之后无法使用react-native run-ios Could not find iPhone X simulator
  6. Delphi Http Https 最好的解决方法(二)
  7. 微服务概念 概念提出者Martin Fowler的译文
  8. 推特微软允许员工永久在家办公,企业如何应对远程办公常态化发展
  9. 项目——仿Steam商城
  10. java多线程相关问题汇总