冒泡优化、插入优化和希尔排序
具体代码请看:NDKPractice项目的datastructure
1. 冒泡排序优化
引用个冒泡排序优化 的链接
思维:
特点:适用于数组中大部分是排好序的数组
,如果大部分都没排好序,那么花费的时间比原来的冒泡排序还多
1 | // 冒泡排序的优化(适用于数组中大部分是排好序的数组) |
2. 插入排序优化
特点:适用于数组中大部分是排好序的数组
,比选择排序快很多(时间复杂度上是 O(n)级别)
1 | void insertSort(int arr[],int len){ |
3.对比插入排序和选择排序
最好情况 | 最坏情况 | |
---|---|---|
选择排序 | 比较N*(N-1)/2次,交换0次 | 比较N(N-1)/2次,交换N(N-1)/2次,赋值N*(N-1)/2次 |
插入排序 | 比较N-1次,交换0次 | 比较N(N-1)/2次,交换N(N-1)/2次,赋值3N(N-1)/2次 |
改进插入排序 | 比较N-1次,交换0次 | 比较N(N-1)/2次,交换N(N-1)/2次,赋值N*(N-1)/2 + 2(N-1)次 |
4.希尔排序(插入排序优化的再次优化)
引用个希尔排序链接)
希尔排序在 数据非常无序时
是首选
,数据很有序
的时候还是没有改进插入排序
快
思想: 分治
1 | // 希尔排序思想:对插入排序分组 |