直接插入排序和希尔排序
来源:互联网 发布:过墙软件 编辑:程序博客网 时间:2024/04/30 02:46
直接插入排序是先将第一个数当做有序区,然后对之后的数进行排序依次将它们放入有序区
void InsertSort(int*arr, int n){ for (int i = 0; i < n - 1; ++i) { int end=i; int tmp = arr[end + 1]; while (end >= 0) { if (arr[end] > tmp) { arr[end + 1] = arr[end]; --end; } else { break; } } arr[end + 1] = tmp; }}
希尔排序是对直接插入排序的优化,因为如果是逆序的,直接插入排序的效率太低,它的时间复杂度一定是O(N2)
希尔排序就是一种对直接排序进行优化的有效措施,但是如果是有序的,希尔排序反而具有反作用
希尔排序也可以认为是一种分组排序
其实这几组是并行执行的,gap的值越大,小的数会尽快往前排序,但是也是越不接近有序的
void ShellSort(int *arr,size_t n){ int gap = n ; while (gap >1) { gap = gap / 3 + 1; for (size_t i = 0; i< n - gap; ++i) { int end = i; int tmp = arr[end + gap]; for (; end >= 0; end -= gap) { if (arr[end] > tmp) { arr[end + gap] = arr[end]; } else { break; } } arr[end + gap] = tmp; } }}
当gap变成1的时候也就变成了直接插入排序。
希尔排序它的时间复杂度是介于O(N)~O(N2)之间的
阅读全文
1 0
- 插入排序(直接 和 希尔)
- 直接插入排序和希尔排序
- java直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 直接插入排序和希尔排序
- 【直接插入排序】和【希尔排序】
- 直接插入排序和希尔排序
- 数据结构排序--直接插入和希尔排序
- 插入排序:直接插入排序和希尔排序
- 关于插入排序 直接插入排序和希尔排序
- 插入排序--直接插入排序和希尔排序
- 插入排序--直接插入排序和希尔排序
- 插入排序类:直接插入排序和希尔排序
- 算法-排序-插入排序(直接插入和希尔排序)
- 在kotlin中使用room(Room Persistence Library)和遇到的坑
- 二叉树的遍历 Java
- PAT乙级 1012. 数字分类 (20)
- Java并发编程-线程安全性
- MySQL——修改root密码的4种方法(以windows为例)
- 直接插入排序和希尔排序
- Spring Data JPA使用复合主键
- ssh_Connection reset by peer
- C/C++中Windows API 简单的(Callback)回调机制
- NPC问题证明题
- mysql的主从复制,从库设为只读,不能写么
- Linux 内核剖析
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
- vs如何将工程配置,保存到属性表