插入排序——直接插入排序和希尔排序
来源:互联网 发布:固定资产登记软件 编辑:程序博客网 时间:2024/05/21 10:53
常见的比较排序算法有插入排序(直接插入排序和希尔排序),选择排序(选择排序和堆排序),交换排序(冒泡排序和快速排序),归并排序。
还有非比较排序:基数排序和计数排序。
本文讲讲插入排序中的直接插入排序和希尔排序。
直接插入排序
如图所示是我们直接插入排序的算法思想,我们可以看到它的时间复杂度为O(N的平方)。
代码实现:
void InsertSort(int *a,size_t n){ assert(a); for (size_t i = 0; i<n - 1; ++i) { int end = i; int tmp = a[end + 1]; while ( end>=0 ) { if (a[end] > tmp) { a[end + 1] = a[end]; --end; } else { break; } } a[end + 1] = tmp; }}
希尔排序:希尔排序可以说的直接插入排序的一种优化,他大致分为两步:预排序,直接插入排序。
上图就是希尔排序的算法思想,通常我们gap的取值是数组大小的三分之一加1,为什么加1呢,因为我们要保证gap>=1。也就是说gap至少有一个元素。
代码实现:
void ShellSort(int* a, size_t n){ assert(a); //1,预排序 2, int gap = n; while (gap > 1) { gap = gap / 3 + 1; for (size_t i = 0; i < n - gap; ++i) { int end = i; int tmp = a[end + gap]; while (end >= 0) { if (a[end]>tmp) { a[end + gap] = a[end]; end -= gap; } else { break; } a[end + gap] = tmp; } } }}
阅读全文
0 0
- 插入排序——直接插入排序和希尔排序
- 插入排序(直接 和 希尔)
- 插入排序——直接插入和希尔
- 排序算法——插入排序(直接插入排序、折半插入排序、希尔排序)
- 插入排序-直接插入排序 希尔排序
- 直接插入排序和希尔排序
- java直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 【直接插入排序】和【希尔排序】
- 直接插入排序和希尔排序
- 数据结构排序--直接插入和希尔排序
- 插入排序——直接插入排序和希尔排序,C++代码实现
- 插入排序:直接插入排序和希尔排序
- 修改jsp页面,Tomcat报Publishing failed with multiple errors Could not delete F:\cui\tomcat-6.0.35-8280\web
- Python安装使用VideoCapture类
- Java数据类型以及变量的定义
- 2017年第一次前端面试总结
- redis集群搭建(二)
- 插入排序——直接插入排序和希尔排序
- OpenCV中VideoWriter输出视频文件为空或6KB解决方法(java)
- scala slick基本使用教程
- TOMCAT关闭自动重启方法总结
- composer安装thinkphp5
- MySQL| MySQL语句的执行顺序
- Savings Account
- PHP使用ip2long返回负数
- zookeeper一台机器启动三台zookeeper同时类似操作kafka