排序算法复习——插入类排序
来源:互联网 发布:淘宝上穿越火线6烈龙 编辑:程序博客网 时间:2024/05/16 10:38
在插入类排序的算法中,有直接插入排序,折半插入排序,希尔排序。
直接插入排序:
程序代码演练:
- #include <stdio.h>
- #define N 10
- int main()
- {
- int a[N] = {62, 48, 35, 77, 55, 14, 35, 98, 22, 10};
- int tmp, i, j;
- for(i = 0; i < N; i++) {
- printf("%d ", a[i]);
- }
- printf("\n");
-
- /*插入排序算法*/
- for(i = 1; i < N; i++) { //控制插入的次数
- tmp = a[i];
- j = i-1;
- while(tmp < a[j]) { //寻找插入位置;如果改为<=的话,就会是不稳定的排序
- a[j+1] = a[j];
- j = j-1;
- }
- a[j+1] = tmp;
- }
- for(i = 0; i < N; i++) {
- printf("%d ", a[i]);
- }
- printf("\n");
- return 0;
- }
执行结果:
- 62 48 35 77 55 14 35 98 22 10
- 10 14 22 35 35 48 55 62 77 98
折半插入排序:
折半插入排序其实是对直接插入排序的改进,是在寻找插入位置的时候把折半查找的算法加了进来。
程序代码演练:
- #include <stdio.h>
- #define N 10
- int main()
- {
- int a[N] = {62, 48, 35, 77, 55, 14, 35, 98, 22, 10};
- int tmp, i, j, low, mid, high;
- for(i = 0; i < N; i++) {
- printf("%d ", a[i]);
- }
- printf("\n");
- /*折半排序算法*/
- for(i = 1; i < N; i++) {
- tmp = a[i];
- low = 0;
- high = i-1;
- while(low <= high) { //使用折半查找算法进行查找插入位置
- mid = (low+high)/2;
- if(a[mid] > a[i]) {
- high = mid-1;
- } else {
- low = mid+1;
- }
- }
- for(j=i; j>low; j--) {
- a[j] = a[j-1];
- }
- a[low] = tmp;
- }
- for(i = 0; i < N; i++) {
- printf("%d ", a[i]);
- }
- printf("\n");
- return 0;
- }
执行结果:
- 62 48 35 77 55 14 35 98 22 10
- 10 14 22 35 35 48 55 62 77 98
希尔排序:
对于这个排序算法,首先要清楚它的实现过程。
演练程序:
- #include <stdio.h>
- #define N 8
- void hillsort(int *a, int delta)
- {
- int i, tmp, j;
- /*
- *
- *这里没有按照一趟插入排序就把当前子序列排序完毕,而是从第一个子序列的第二个元
- *素开始进行插入排序,顺序遍历完整个待排序记录的序列
- *
- */
- for(i=delta; i<N; i++) {
- if(a[i] < a[i-delta]) {
- tmp = a[i];
- for(j=i; j>=delta && tmp<a[j-delta]; j=j-delta) {
- a[j] = a[j-delta];
- }
- a[j] = tmp;
- }
- }
- }
- int main()
- {
- int a[N] = {62, 48, 35, 77, 55, 14, 35, 98};
- int i;
- for(i = 0; i < N; i++) {
- printf("%d ", a[i]);
- }
- printf("\n");
-
- /*确定分割距离,每次为上次分隔距离的一半,并且最后一次距离是1,之后结束*/
- for(i=N/2; i>=1; i=i/2) {
- hillsort(a, i);
- }
- for(i = 0; i < N; i++) {
- printf("%d ", a[i]);
- }
- printf("\n");
- return 0;
- }
执行结果:
- 62 48 35 77 55 14 35 98 100 29
- 14 29 35 35 48 55 62 77 98 100
0
上一篇:关于linux内存管理
下一篇:排序算法复习——交换类排序
相关热门文章
- APP开发流程,你知道多少...
- 内核编程实战之RCU机制简单使...
- 单链表以排序方式插入...
- emacs 矩形选区、编辑
- Oracle数据库表是否需要碎片整...
- test123
- 编写安全代码——小心有符号数...
- 彻底搞定C语言指针详解-完整版...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- 排序算法复习——插入类排序
- 算法复习--插入排序
- 排序算法复习之——内部排序算法之——插入排序
- 算法复习-插入排序1
- 算法复习之插入排序
- 算法复习之插入排序
- 排序算法——插入类排序
- 排序—插入排序算法
- 排序算法—插入排序
- 排序算法复习——交换类排序
- 排序算法复习——交换类排序
- 排序算法复习——选择类排序
- 数据结构&算法实践—【排序|插入排序】插入排序
- 排序算法—插入排序之直接插入排序
- 排序算法1—插入排序、选择排序、冒泡排序
- 排序算法——插入排序(直接插入排序、折半插入排序、希尔排序)
- 复习数据结构:排序(一)——插入排序
- 老老实实复习算法: 1 插入排序
- 弹性云项目面试Q&A
- linux内核list.h头文件分析(七)——list.h应用
- bzoj 3729: Gty的游戏 splay+dfs序+阶梯博弈
- Weblogic10.3部署报com.ctc.wstx.stax.WstxInputFactory cannot be cast to javax.xml.stream.XMLInputFactory
- 关于linux内存管理
- 排序算法复习——插入类排序
- 排序算法复习——交换类排序
- 如何在JS中获取当前日期时间及其它操作的代码
- 电脑蓝屏怎么解决
- 排序算法复习——选择类排序
- 进程与线程的区别
- 杭电acm sum第二题
- 前端面试四
- linux系统启动五步曲
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
相思永流传免费阅读
2018经典咏流传
经典咏流传歌曲下载
金典咏流传歌曲
气动物流传输系统
一颗永流传广告词
流体屏
流体
流体手势
磁流体
超临界流体
流体画
流体智力
理想流体
流体教程
流体展会
薄壁流体管
流体输配管网第三版课后答案
流体力学第二版答案
流体流动阻力测定实验报告
流体流动阻力实验报告
工程流体力学
流体力学答案
流体力学三大方程
流体屏是什么
磁流体发电机
流体输配管网第四版课后答案
流体力学公式
输送流体无缝钢管
自考流体力学
输送流体用无缝钢管
滨特尔流体控制
流体无缝钢管
流体静力称衡法
流体力学三大方程公式
流体力学第二版答案龙天渝
8163流体无缝管
脐血流sd值正常范围
脐血流sd值对照表
流光溢彩
流光之城