这次,我们谈论下希尔排序,希尔排序也叫递减增量排序算法。步长也是影响希尔排序的一个重要因素,我们这里主要用Marcin Ciura设计的步长。关键代码如下:

1、希尔排序头文件:shellSort.h

#ifndef SHELLSORT_H
#define SHELLSORT_H
extern void shellSort(int * pArr, const int length);
#endif

2、希尔排序源文件:shellSort.c

#include "shellSort.h"
void shellSort(int * pArr, const int length)
{
const int pInc[9]={1,4,10,23,57,132,301,701,1750};
int len=sizeof(pInc)/sizeof(int);
int i,k,j,tmp;
int inc;
k=0;
while(*(pInc+k)<length && k<=len)
{
k++;
}
while(--k>=0)
{
inc=*(pInc+k);
for(i=inc; i< length; i++)
{
tmp=*(pArr+i);
j=i;
while(j>=inc && *(pArr+j-inc)>tmp)
{
*(pArr+j)=*(pArr+j-inc);
j=j-inc;
}
*(pArr+j)=tmp;
}
}
}

3、main头文件:main.h

#ifndef MAIN_H
#define MAIN_H
#include<stdio.h>
#include "shellSort.h"
int main(void);
void showArr(const int *pArr, const int length);
void initRandomArr(int *pArr, const int length);
#endif

4、main源文件:main.c

#include "main.h"
int main(void)
{
printf("Input array length:\n");
int length;
scanf("%d", &length);
if(length<0)
{
printf("Array length must be larger 0\n");
return 1;
}
int arr[length];
initRandomArr(arr, length);
printf("Get random array :\n");
showArr(arr, length);
shellSort(arr, length);
printf("shell sort result:\n");
showArr(arr, length);
return 0;
}
void showArr(const int *pArr, const int length)
{
int i;
for(i=0; i<length; i++)
{
printf("%d ", *(pArr+i));
}
printf("\n");
}
void initRandomArr(int *pArr, const int length)
{
int i;
srand(time(NULL));
for(i=0; i< length; i++)
{
*(pArr+i)=rand()%1000;
}
}

5、编译:

[root@localhost shellSort]$ gcc -c shellSort.c
[root@localhost shellSort]$ gcc -c main.c
[root@localhost shellSort]$ gcc -o main main.o shellSort.o

执行可执行文件main如下:

[root@localhost shellSort]$ ./main
Input array length:
12
Get random array :
518 713 265 31 350 931 592 872 489 927 640 106
shell sort result:
31 106 265 350 489 518 592 640 713 872 927 931 

希尔排序是个不稳定的排序,性能优于直接插入排序

希尔排序Linux下c 实现相关推荐

  1. 希尔排序Linux下C实现

    2019独角兽企业重金招聘Python工程师标准>>> 本次,我们谈论下希尔排序,希尔排序也叫递减增量排序算法.步长也是影响希尔排序的一个重要因素,我们这里主要用Marcin Ciu ...

  2. 《大话数据结构》第9章 排序 9.6 希尔排序(下)

    9.6.3 希尔排序算法         好了,为了能够真正弄明白希尔排序的算法,我们还是老办法--模拟计算机在执行算法时的步骤还研究算法到底是如何进行排序的.         希尔排序算法代码如下. ...

  3. Linux按压缩率大小排序,Linux下常用压缩 解压命令与压缩比率对比

    常用的格式有: tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大. 1. tar 只是打包动作,相当于归档处理,不做压缩:解压也一样 ...

  4. linux显示mem进行排序,linux下top命令显示详解

    linux下的top命令是系统管理员分析系统运行现状的法宝,但是每当top之后,除了几个用得最多的参数,其他数字对于我来说,只是数字而已,完全不明白其具体含义.由此做一次top专题,对这个命令的参数和 ...

  5. Linux按压缩率大小排序,Linux下经常使用压缩 解压命令和压缩比率对比

    经常使用的格式有: tar, tar.gz(tgz), tar.bz2, 算法 不一样方式,压缩和解压方式所耗CPU时间和压缩比率也差别也比较大.测试 1. tar 只是打包动做,至关于归档处理,不作 ...

  6. linux编程排序,Linux下简单的c编程——选择法排序

    针对函数和数组的C语言的学习,我今天来写一个比较典型的数组和函数的结合的例子--选择法排序 选择法顾名思义,先选择最大和最小的数,然后再进行排序 第一步首先附上我的代码.第一段代码是实现从大到小排序, ...

  7. linux 输入8个字母进行排序,Linux下使用sort进行排序

    sort:可以实现依据不同的数据类型进行排序,其语法及常用参数格式如下: sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序. 参 ...

  8. linux qtcreator输入中文,linux下QtCreator无法输入中文的情况

    解决linux下QtCreator无法输入中文的情况 安装了QtCreator5.3.1后无法输入中文,确切的说是无法打开输入法.以前使用iBus输入法的时候没有这个问题,现在使用sougou输入法才 ...

  9. 在Linux下怎样让top命令启动之后就按内存使用排序(或CPU使用排序)?

    在Linux下怎样让top命令启动之后就按内存使用排序(或CPU使用排序)? top 命令的参数中没有方法可以直接做到. man top 写道 NAME        top - display Li ...

最新文章

  1. web前端培训之Javascript如何改变数组的长度?
  2. SWF文件加密、混淆
  3. Windows安装Pytorch/torchvision
  4. 动手动脑之接口与继承
  5. 【CV】使用计算机视觉算法检测钢板中的焊接缺陷
  6. 深入探索.NET框架内部了解CLR如何创建运行时对象
  7. 【自然框架】之通用权限(四):角色表组
  8. windows10下安装pytorch并导入pycharm
  9. linux节点ssh免密码登录linux节点
  10. JavaScript 存储Cookie
  11. GBT19668.3-2007 电子设备机房系统工程监理规范
  12. 计算机技巧:Vmware虚拟机恢复物理机GHOST备份
  13. 玩转web表单网页快速开发(❤建议收藏❤)
  14. 【大学物理·早期通子论和量子力学基础】德布罗意波微观粒子的波粒二象性
  15. JDK1.8 Collection知识点与代码分析--TreeMap
  16. Verilog语言注意事项
  17. 行政区划代码2020(SQL)--(下)
  18. onenote的笔记本在windows10保存的路径
  19. [(1+1)2] ?
  20. Mybatis写SQL语句update返回值为null

热门文章

  1. View的foreground属性
  2. 聊聊kafka consumer offset lag increase异常
  3. 互动百科创建词条怎么做才能通过审核
  4. rsync+xinetd+inotify+sersync
  5. 超实用的Excel自动排序小技巧,原来这么简单,早点知道就好了!
  6. ps切片成html形式怎么用,PS教程:Photoshop切片工具把效果图转成网页格式 PS入门综合 - PS学习网...
  7. html标签中文字换行
  8. Win7怎么连接手机热点
  9. 数据压缩(十四)——AR模型的参数估计阅读
  10. 【转】DDR3中的ODT