C语言实例解析精粹学习笔记——43(希尔排序)
实例说明:
用希尔排序方法对数组进行排序。由于书中更关注的实例,对于原理来说有一定的解释,但是对于第一次接触的人来说可能略微有些简略。自己在草稿纸上画了好久,后来发现网上有好多很漂亮的原理图。
下面将原书中的程序附上(主函数里的程序略有差异)
#include <stdio.h>
#include <stdlib.h> #define MAX 256
int R[MAX]; void ShellPass(int d, int n)
{
//希尔排序中的一趟排序,d为当前增量
int i,j;
for(i=d+; i<=n; i++) //将R[d+1...n]分别插入各组当前的有序区。
{
if(R[i] < R[i-d])
{
R[]=R[i]; j=i-d; //R[0]只是暂存单元,不是哨兵。
do{ //查找R[i]的插入位置
R[j+d] = R[j]; //后移记录
j = j-d; //查找前一记录
}while(j> && R[]<R[j]);
R[j+d] = R[]; //插入R[i]到正确的位置上
}
}
} void ShellSort(int n)
{
int increment = n; //增量初值
do{
increment = increment/ +; //求下一增量
ShellPass(increment, n);
}while(increment > );
} int main()
{
int n; printf("Please input total element number of the sequence:");
scanf("%d",&n); if(n > MAX)
{
printf("ERROR! There are too many elements!");
return ;
}
else if(n <= )
{
printf("ERROR!");
return ;
} printf("Please input the element one by one:\n");
for(int i=; i <= n; i++)
{
scanf("%d", &R[i]);
} printf("The sequence you input is :");
for(int i=; i<=n; i++)
printf("%4d", R[i]); ShellSort(n);
printf("\nThe sequence after shell sort is:");
for(int i=; i<=n; i++)
printf("%4d", R[i]); return ;
}
C语言实例解析精粹学习笔记——43(希尔排序)的更多相关文章
- C语言实例解析精粹学习笔记——18
<C语言实例解析精粹>中编译环境采用的是Turbo C 2.0.但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记. 实例18:将一个无符号整数转换为 ...
- C语言实例解析精粹学习笔记——35(报数游戏)
实例35: 设由n个人站成一圈,分别被编号1,2,3,4,……,n.第一个人从1开始报数,每报数位m的人被从圈中推测,其后的人再次从1开始报数,重复上述过程,直至所有人都从圈中退出. 实例解析: 用链 ...
- C语言实例解析精粹学习笔记——42(插入排序)
实例说明: 将一个整数数组按从小到大的顺序进行排序.(主要学习基本的插入排序和改进的冒泡排序的算法和应用) 思路1: 从第一个数据开始,分别比较其后的数据,若比它小,则将这两个数的位置交换:从第一个数 ...
- C语言实例解析精粹学习笔记——36(模拟社会关系)
实例: 设计一个模拟社会关系的数据结构,每个人的信息用结构表示,包含名字.性别和指向父亲.母亲.配偶.子女的指针(只限两个子女).要求编写以下函数: (1)增加一个新人的函数 (2)建立人与人之间关系 ...
- C语言实例解析精粹学习笔记——32
实例32: 编制一个包含姓名.地址.邮编和电话的通讯录输入和输出函数. 思路解析: 1.用结构体来完成姓名.地址.邮编和电话的组合. 2.结构体指针的使用. 3.malloc的使用 4.scanf函数 ...
- C语言实例解析精粹学习笔记——31
实例31: 判断字符串是否是回文 思路解析: 引入两个指针变量(head和tail),开始时,两指针分别指向字符串的首末字符,当两指针所指字符相等时,两指针分别向后和向前移动一个字符位置,并继续比较, ...
- C语言实例解析精粹学习笔记——30
实例30: 用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列.设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次.例如,对于s[]="abc",n=2, ...
- C语言实例解析精粹学习笔记——28
实例28:从键盘读入实数 题目要求: 编制一个从键盘读入实数的函数readreal(double *rp).函数将读入的实数字符列转换成实数后,利用指针参数rp,将实数存于指针所指向的变量*rp. 思 ...
- C语言实例解析精粹学习笔记——26
实例26:阿拉伯数字转换为罗马数字,将一个整数n(1~9999)转换为罗马数字,其中数字和罗马数字的对应关系如下: 原书中的开发环境很老,我也没有花心思去研究.自己在codeblocks中进行开发的, ...
随机推荐
- Flask博客类登录注册验证模块代码(十四)
1 文件系统 blog #博客类 App forms #表单 __init__.py user.py models #模型 __init__.py user.py static #静态文件 templ ...
- 【Leetcode】【Easy】Add Binary
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- php调用含有命名空间的类
现有a.php 和 b.php在同一个目录下 a.php中 namespace myspace; class A{ __construct(){} .... } b.php中调用类A require_ ...
- 查询python的安装路径
参考链接: https://blog.csdn.net/orangleliu/article/details/44907221 (tf_14) novak@novak-ZBook15G2:~$ pyt ...
- May 22nd 2017 Week 21st Monday
The biggest adventure you can take is to live the life of your dreams. 你能经历的最大的冒险,就是过上你梦想的生活. Just l ...
- 浏览器下出现net::ERR_BLOCKED_BY_CLIENT的解决办法
转发网址:https://www.cnblogs.com/wenzheshen/p/7724065.html 当我们在做开发时,调试页面图片会出现部分图片无法正常显示,并且确认图片的地址正确: 按F1 ...
- luogu P3787 冰精冻西瓜
嘟嘟嘟 好题,好题…… 看这个修改和询问,就知道要么是求完dfs序后线段树维护,要么是树剖.又因为这道题都是子树的操作,没有链上的,所以线段树就够了. 然而重点不是这个.这道题最麻烦的是线段树push ...
- 【转】Android应用程序窗口(Activity)窗口对象(Window)创建指南
在前文中,我们分析了Android应用程序窗口的运行上下文环境的创建过程.由此可知,每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一 ...
- spring异常+自定义以及使用
1.首先自定义异常 DataException: package com.wbg.maven1128.exception; public class DataException extends Exc ...
- data-ng-show 指令
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...