插入排序,希尔排序
来源:互联网 发布:Ubuntu centos 编辑:程序博客网 时间:2024/05/16 06:36
从刚开始本科学习数据结构的时候,对希尔排序就一直稀里糊涂的,弄不清到底怎么回事,重温知识,对此才稍加了解,希尔排序就是插入排序,不过它对插入排序进行了一些优化,我们之道,插入排序的性能与初始序列的排序状况有关,假设需要的排序效果是从小到达,如果给定的序列原本就是有序的,那么排序的时候只需遍历一遍数组就可以了;但是,如果给定的序列原本是逆序的,必须 5 4 3 2 1,那么对数组的中的数据(注意,这里是数据,而非数组)扫描的次数大约是(5+4+3+2+1)次,也就是说如果给定n个数据,排序的时间复杂度是O(n^2),所以,插入排序对于具有“良好有序性”的序列(也就是说序列不是逆序的)来说,其排序效果还是不错的;但是对于纯逆序的序列来说,排序效果就不是那么好了,这时候,希尔排序的优化效果就体现出来了,它的思想是这样的:先对局部序列进行数次插入排序,这样可以使整体序列趋于有序,最后对整体序列进行插入排序,就可以得到有序的序列。
时间复杂度 空间复杂度插入排序 O(N^2) O(1)希尔排序 O(N^1.3)~O(N^2) O(1)#include<stdio.h>void insert(int arr[], int n){ for (int i = 1; i < n; i++) //2~N依次插入 { //查找插入位置 int pos = -1; for (int j = i - 1; j >= 0 ; j--) //依次遍历每一个数 { if (arr[j] > arr[i]) { pos = j; } } if (pos >= 0) { //进行后移 int key = arr[i]; for (int k = i - 1; k >= pos; k--) arr[k + 1] = arr[k]; arr[pos] = key; } }}void ShellSort(int arr[], int n){ for (int step = 5; step >= 1; step -= 2) { for (int i = step; i < n; i = i+step) //2~N依次插入0+step~n { //查找插入位置 int pos = -1; for (int j = i - step; j >= 0; j -= step) //依次遍历每一个数 { if (arr[j] > arr[i]) { pos = j; } } if (pos >= 0) { //进行后移 int key = arr[i]; for (int k = i - step; k >= pos; k-=step) arr[k + step] = arr[k]; arr[pos] = key; } } }}int main(){ int arr[] = { 7, 61, 41, 8, 9, 3, 2 }; int length = sizeof(arr) / sizeof(arr[0]); ShellSort(arr, length); for (int i = 0; i < length; i++) printf("%5d", arr[i]); printf("\n");}
阅读全文
0 0
- 插入排序--希尔排序
- 插入排序 希尔排序
- 插入排序--希尔排序
- 插入排序,希尔排序
- 插入排序:希尔排序
- 插入排序-希尔排序
- 插入排序(希尔排序)
- 【插入排序】希尔排序
- 插入排序、希尔排序
- 插入排序,希尔排序
- 插入排序希尔排序
- 插入排序-希尔排序
- 插入排序-希尔排序
- 插入排序&&希尔排序
- 插入排序-希尔排序
- 插入排序,希尔排序
- 插入排序&希尔排序
- 二分插入排序 插入排序 希尔排序
- js出现了Uncaught SyntaxError: Unexpected token .
- drawerLayout
- java基本调优
- Java Fast IO in ICPC(改编自Petr)
- iOS开发中截取相机部分画面,切割sampleBuffer(Crop sample buffer)
- 插入排序,希尔排序
- synchronized用法
- 选择排序 -- 算法小结
- 最短路径算法
- 关于出现数据库错误ORA-01461: can bind a LONG value only for insert into a LONG column
- 操作系统:CPU调度
- 1072. Gas Station (30)
- 【jzoj5347】【NOIP2017提高A组模拟9.5】【遥远的金字塔】【斜率优化动态规划】
- 关于<s:action executeResult="true">死循环