希尔排序Linux下c 实现
这次,我们谈论下希尔排序,希尔排序也叫递减增量排序算法。步长也是影响希尔排序的一个重要因素,我们这里主要用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 实现相关推荐
- 希尔排序Linux下C实现
2019独角兽企业重金招聘Python工程师标准>>> 本次,我们谈论下希尔排序,希尔排序也叫递减增量排序算法.步长也是影响希尔排序的一个重要因素,我们这里主要用Marcin Ciu ...
- 《大话数据结构》第9章 排序 9.6 希尔排序(下)
9.6.3 希尔排序算法 好了,为了能够真正弄明白希尔排序的算法,我们还是老办法--模拟计算机在执行算法时的步骤还研究算法到底是如何进行排序的. 希尔排序算法代码如下. ...
- Linux按压缩率大小排序,Linux下常用压缩 解压命令与压缩比率对比
常用的格式有: tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大. 1. tar 只是打包动作,相当于归档处理,不做压缩:解压也一样 ...
- linux显示mem进行排序,linux下top命令显示详解
linux下的top命令是系统管理员分析系统运行现状的法宝,但是每当top之后,除了几个用得最多的参数,其他数字对于我来说,只是数字而已,完全不明白其具体含义.由此做一次top专题,对这个命令的参数和 ...
- Linux按压缩率大小排序,Linux下经常使用压缩 解压命令和压缩比率对比
经常使用的格式有: tar, tar.gz(tgz), tar.bz2, 算法 不一样方式,压缩和解压方式所耗CPU时间和压缩比率也差别也比较大.测试 1. tar 只是打包动做,至关于归档处理,不作 ...
- linux编程排序,Linux下简单的c编程——选择法排序
针对函数和数组的C语言的学习,我今天来写一个比较典型的数组和函数的结合的例子--选择法排序 选择法顾名思义,先选择最大和最小的数,然后再进行排序 第一步首先附上我的代码.第一段代码是实现从大到小排序, ...
- linux 输入8个字母进行排序,Linux下使用sort进行排序
sort:可以实现依据不同的数据类型进行排序,其语法及常用参数格式如下: sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序. 参 ...
- linux qtcreator输入中文,linux下QtCreator无法输入中文的情况
解决linux下QtCreator无法输入中文的情况 安装了QtCreator5.3.1后无法输入中文,确切的说是无法打开输入法.以前使用iBus输入法的时候没有这个问题,现在使用sougou输入法才 ...
- 在Linux下怎样让top命令启动之后就按内存使用排序(或CPU使用排序)?
在Linux下怎样让top命令启动之后就按内存使用排序(或CPU使用排序)? top 命令的参数中没有方法可以直接做到. man top 写道 NAME top - display Li ...
最新文章
- web前端培训之Javascript如何改变数组的长度?
- SWF文件加密、混淆
- Windows安装Pytorch/torchvision
- 动手动脑之接口与继承
- 【CV】使用计算机视觉算法检测钢板中的焊接缺陷
- 深入探索.NET框架内部了解CLR如何创建运行时对象
- 【自然框架】之通用权限(四):角色表组
- windows10下安装pytorch并导入pycharm
- linux节点ssh免密码登录linux节点
- JavaScript 存储Cookie
- GBT19668.3-2007 电子设备机房系统工程监理规范
- 计算机技巧:Vmware虚拟机恢复物理机GHOST备份
- 玩转web表单网页快速开发(❤建议收藏❤)
- 【大学物理·早期通子论和量子力学基础】德布罗意波微观粒子的波粒二象性
- JDK1.8 Collection知识点与代码分析--TreeMap
- Verilog语言注意事项
- 行政区划代码2020(SQL)--(下)
- onenote的笔记本在windows10保存的路径
- [(1+1)2] ?
- Mybatis写SQL语句update返回值为null
热门文章
- View的foreground属性
- 聊聊kafka consumer offset lag increase异常
- 互动百科创建词条怎么做才能通过审核
- rsync+xinetd+inotify+sersync
- 超实用的Excel自动排序小技巧,原来这么简单,早点知道就好了!
- ps切片成html形式怎么用,PS教程:Photoshop切片工具把效果图转成网页格式 PS入门综合 - PS学习网...
- html标签中文字换行
- Win7怎么连接手机热点
- 数据压缩(十四)——AR模型的参数估计阅读
- 【转】DDR3中的ODT