C实例---插入排序(Shell)
来源:互联网 发布:html5 720度全景源码 编辑:程序博客网 时间:2024/05/16 06:45
问题描述:简单插入排序的时间复杂度是:n^2,shell排序是对其时间复杂度改进的一种算法,改善后的复杂度为:nlogn
分析:待排数据 99 42 57 74 46 85 32 78 40 33 74 88 65 27 38 69 51 32 59 24
对其进行一次划分:
d = 20 / 2 = 10 :99 42 57 74 46 85 32 78 40 33 | 74 88 65 27 38 69 51 32 59 24
99 与 74 进行简单选择排序,42与88 ……..
对划分的序列进行简单选择排序,直到d = 1为止。
一趟排序的结果:74 42 57 27 38 69 32 32 40 24 | 99 88 65 74 46 85 51 78 59 33
各趟的排序过程见运行结果。
代码:
#include <stdio.h>void ShellSort(int s[], int len){ int i,j,d,key = 0; d = len / 2; while (d >= 1) { for (i = d; i < len; i ++) //划分一次进行一次简单选择排序 { key = s[i]; j = i - d; while (j >=0 && s[j] > key) { s[j + d] = s[j]; j -= d; } s[j + d] = key; } printf("d = %.2d: ",d); for (i = 0; i < len; i ++) { for (i = 0; i < len; i ++) if (d > 0 && (i + 1) % d == 0) printf("%d | ",s[i]); else printf("%d ",s[i]); } printf("\n"); d /= 2; }}int main (){ int a[20] = {99,42,57,74,46,85,32,78,40,33,74,88,65,27,38,69,51,32,59,24}; //int a[5] = {5,4,3,2,1}; int i; printf("待排序列:"); for (i = 0; i < 20; i ++) { if ((i + 1) % 10 == 0) printf("%d | ",a[i]); else printf("%d ",a[i]); } printf("\n"); ShellSort(a, 20); printf("排序结果: "); for (i = 0; i < 20; i ++) printf("%d ",a[i]); printf("\n"); return 0;}
运行结果:
简单插入排序:http://blog.csdn.net/huazhen1234/article/details/53894004
随机生成测试数组:http://blog.csdn.net/huazhen1234/article/details/53896153
0 0
- C实例---插入排序(Shell)
- 插入排序----直接插入排序(C、C++、Python、Shell)
- Shell插入排序(c语言版)
- shell排序法-改良的插入排序(C)
- C实例——插入排序(简单插入)
- 插入排序、Shell排序和归并排序实例
- 排序:插入排序(直接插入排序、Shell排序)
- C语言程序----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)
- C语言排序实例(选择、冒泡、插入、折半、快速)
- C语言排序实例(选择、冒泡、插入、折半、快速)
- c语言排序实例(选择、冒泡、插入、折半、快速)
- C语言排序实例(选择、冒泡、插入、折半、快速)
- 插入排序-(直接插入、折半插入、Shell排序)
- 【C语言经典实例】-直接插入排序
- 插入排序(直接插入排序和希尔(shell)排序
- Shell排序(改良的插入排序)
- 插入排序之希尔(shell)排序
- 插入排序-【Shell排序】
- 设计模式六大原则(3):依赖倒置原则
- react-native android环境搭建
- 群聊服务——代理模式OR适配器模式
- Centos 7.2 安装jdk1.6 tomcat6 mysql5.5
- iOS开发过程中的一些小技巧,绝对有你想要的
- C实例---插入排序(Shell)
- 关于Hibernate在使用原生SQL语句多表查询所遇到的问题
- Hadoop深入学习:Combiner
- OpenGL学习中对示例代码分析所得
- 设计模式六大原则(4):接口隔离原则
- MC8051中XBYTE的使用
- BZOJ 1379 模拟退火
- osg开关门
- 流量矿石功能升级,充分发挥快播“匠心”精神