插入排序(直接插入排序,希尔排序)
2017-07-11 13:30
951 查看
直接插入排序
直接插入排序是把一组数据的第一个数看做有序(同时这个数是有序区的最后一个数end),拿要插入的数与end比较大小。(1)比end大,直接放在end的后面(2)比end小,把end这个数放在end的后一个位置,再把要插入的数与end的前一个数比较。
直接插入排序的时间复杂度:O(N^2).
最好情况(时间复杂度是O(N)):原序列接近于有序
最坏情况(时间复杂度是O(N^2)):原序列接近于逆序
直接插入排序是一种稳定的排序算法。
希尔排序
希尔排序是直接插入排序的优化,用gap值使得小的值能尽量排到前面,大的值能尽量排到后面。
void ScheerSort(int* a, int size,int gap)
{
while (gap > 1)
{
gap = gap / 3 + 1;
for (size_t i = 0; i < size - gap; ++i)
{
int end = i;
int tmp = a[end + gap];
while (end >= 0)
{
if (tmp < a[end])
{
a[end + gap] = a[end];
end -= gap;
}
else
{
break;
}
}
a[end + gap] = tmp;
}
}
}
希尔排序的时间复杂度:O(N^1.3)[最好情况:O(N) 最坏情况:O(N^2)] 。希尔排序是不稳定的
总结:直接插入排序最好的情况恰恰是希尔排序最坏的情况。直接插入最坏的情况是希尔排序最好的情况。因为希尔排序能够把大的数尽量靠后,小的数尽量靠前。
直接插入排序是把一组数据的第一个数看做有序(同时这个数是有序区的最后一个数end),拿要插入的数与end比较大小。(1)比end大,直接放在end的后面(2)比end小,把end这个数放在end的后一个位置,再把要插入的数与end的前一个数比较。
void InsertSort(int* a,int n)//1 直接插入排序 { for (int i = 0; i <n-1; ++i) { int end = i ; int tmp = a[i+1]; while(end>=0) { if (tmp < a[end]) { a[end + 1] = a[end]; --end; } else { break; } } a[end + 1] = tmp; } }
直接插入排序的时间复杂度:O(N^2).
最好情况(时间复杂度是O(N)):原序列接近于有序
最坏情况(时间复杂度是O(N^2)):原序列接近于逆序
直接插入排序是一种稳定的排序算法。
希尔排序
希尔排序是直接插入排序的优化,用gap值使得小的值能尽量排到前面,大的值能尽量排到后面。
void ScheerSort(int* a, int size,int gap)
{
while (gap > 1)
{
gap = gap / 3 + 1;
for (size_t i = 0; i < size - gap; ++i)
{
int end = i;
int tmp = a[end + gap];
while (end >= 0)
{
if (tmp < a[end])
{
a[end + gap] = a[end];
end -= gap;
}
else
{
break;
}
}
a[end + gap] = tmp;
}
}
}
希尔排序的时间复杂度:O(N^1.3)[最好情况:O(N) 最坏情况:O(N^2)] 。希尔排序是不稳定的
总结:直接插入排序最好的情况恰恰是希尔排序最坏的情况。直接插入最坏的情况是希尔排序最好的情况。因为希尔排序能够把大的数尽量靠后,小的数尽量靠前。
相关文章推荐
- java数据结构之插入排序(直接插入排序、折半插入排序、希尔排序)
- 插入排序——直接插入排序和希尔排序
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
- 关于插入排序 直接插入排序和希尔排序
- Java排序算法总结之(一)——插入排序(直接插入排序、折半插入排序、希尔排序)
- 算法-排序-插入排序(直接插入和希尔排序)
- 【Java常用排序算法】插入排序(直接插入排序、希尔排序)
- 【Java常用排序算法】插入排序(直接插入排序、希尔排序)
- 排序算法之直接插入排序、二分插入排序和希尔排序
- 直接插入排序、二分插入排序、希尔排序、冒泡排序与简单选择排序
- 插入排序——直接插入排序和希尔排序,C++代码实现
- 各种排序算法汇总(插入排序:直接插入排序、折半插入排序、希尔排序)
- 排序算法(二)、插入排序 —— 直接插入排序 和 希尔排序
- 插入排序【直接插入排序和希尔排序】
- 【算法拾遗(java描述)】--- 插入排序(直接插入排序、希尔排序)
- 插入排序(直接插入排序和希尔排序)
- 插入排序(直接插入排序,希尔排序)
- java排序之插入排序(直接插入排序和希尔排序)
- 插入排序(直接插入排序和希尔排序)
- 插入排序(直接插入排序 and 希尔排序)