数据结构---直接插入排序
2014-05-23 16:49
253 查看
直接插入排序是最简单的排序算法
算法思想:将第一个数据元素看成是一个有序的子序列,再依次从第二个数据元素起逐个插入到这个有序的子序列中。
设 i 为第 i 个插入到序列中的元素,那么 elem[i] 插入到elem[0]~~elem[i-1] 构成的有序子序列中。
在进行插入时注意要从后向前逐一比较,并且在比较时一定要注意边界问题 i 与 j ,由于第一个元素直接有序,因此排序直接从第二个元素开始,这就是i从1 开始的原因。
而 j 则是从当前待插入元素的前一个开始即 i-1。
代码如下:
bool InsertSort(int *arr,int len)
{
for(int i=1; i<len; ++i)
{
int temp=arr[i];
for(int j=i-1; j>=0; --j)
{
if(temp<arr[j])
{
arr[j+1] = arr[j];
}
else
break;
}
arr[j+1] = temp;
}
return true;
}
直接插入排序时间复杂度:O(n^2), 空间复杂度为O(1)
当序列越接近有序时间复杂度越小,最好的时间复杂度为O(n)
直接插入排序适合数据元素较少的情况,数据元素较大则不宜用直接插入排序
算法思想:将第一个数据元素看成是一个有序的子序列,再依次从第二个数据元素起逐个插入到这个有序的子序列中。
设 i 为第 i 个插入到序列中的元素,那么 elem[i] 插入到elem[0]~~elem[i-1] 构成的有序子序列中。
在进行插入时注意要从后向前逐一比较,并且在比较时一定要注意边界问题 i 与 j ,由于第一个元素直接有序,因此排序直接从第二个元素开始,这就是i从1 开始的原因。
而 j 则是从当前待插入元素的前一个开始即 i-1。
代码如下:
bool InsertSort(int *arr,int len)
{
for(int i=1; i<len; ++i)
{
int temp=arr[i];
for(int j=i-1; j>=0; --j)
{
if(temp<arr[j])
{
arr[j+1] = arr[j];
}
else
break;
}
arr[j+1] = temp;
}
return true;
}
直接插入排序时间复杂度:O(n^2), 空间复杂度为O(1)
当序列越接近有序时间复杂度越小,最好的时间复杂度为O(n)
直接插入排序适合数据元素较少的情况,数据元素较大则不宜用直接插入排序
相关文章推荐
- 数据结构:直接插入排序
- 第16周SHH数据结构-【项目1-验证算法(1)直接插入排序】
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 数据结构-排序: 插入排序(直接插入排序法)
- 直接插入排序 - 数据结构和算法90
- 数据结构 直接插入排序
- 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- 图解"数据结构--内部排序算法"----插入排序:直接插入排序、希尔排序
- 数据结构-插入排序-直接插入排序
- 和小强一起学习数据结构java版之直接插入排序
- 数据结构10-排序方法之直接插入排序的实例
- 数据结构--直接插入排序
- C++代码,数据结构-内部排序-插入排序-直接插入排序
- 数据结构—单链表—直接插入排序
- {数据结构}直接插入排序
- 数据结构-插入排序之直接插入排序
- 数据结构面试之十——排序1(直接插入、希尔、冒泡、直接选择排序)
- 数据结构排序--直接插入和希尔排序
- 【数据结构】直接插入排序
- 数据结构-插入排序-直接插入排序