插入排序
来源:互联网 发布:摄像头自动对焦算法 编辑:程序博客网 时间:2024/04/27 16:20
有两种简单排序算法分别是插入排序和选择排序,两个都是数据量小时效率高。实际中插入排序一般快于选择排序,由于更少的比较和在有差不多有序的集合表现更好的性能。但是选择排序用到更少的写操作,所以当写操作是一个限制因素时它被使用到。
常常被用作为复杂算法的一部分,希尔排序是插入排序的一种变体对数据大时更有效。
优点:
1.实现简单;
2.对于少量数据效率高;
3.对于差不多已经排好顺序的集合效率高,时间复杂度为O(n+d),d是错位数字的个数;
43比起其他简单二次(O(n^2))算法(选择排序,冒泡排序),他的最好的情况是O(n)(集合接近顺序排好);
5.稳定,不会改变相等数原有的顺序;
插入排序类似于选择排序,不同之处是插入排序是一个元素一个元素地往有序序列中插入,而选择排序则是在无序序列中选择最大(最小)元素放入有序队列末尾。一个主要操作有序队列,一个则是无序队列。这样就导致选择排序每次都要遍历一次无序队列,而插入排序则不需要遍历整个有序队列,只需要遍历到该元素应有的位置即可,这样就使得基本有序的队列的复杂度为O(n).
但同时这会导致插入排序用到更多的写操作,因为内部循环时他对数组进行大量的移位操作,大家知道移位操作对于数组是非常低效率的。而选择排序因为每次添加元素都是添加在末尾,所以不需要移位操作。
#include <stdio.h>
void insertSort(int arr[], int size)
{
int pos1 = 0, pos2 =0;
for(pos1 = 1; pos1 < size; ++pos1)
{
int temp = arr[pos1];
for(pos2 = pos1-1; pos2 >= 0; --pos2)
{
if( arr[pos2] > temp)
{
arr[pos2+1] = arr[pos2];
}
else
{
break;
}
}
arr[pos2+1] = temp;
}
}
int main()
{
int arr[] = {-3,-5,0,-2,5,1,6,8,7,-9,20};
int i = 0;
insertSort(arr, 11);
for(i = 0; i < 11; ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- window对象
- javadoc时候乱码-编码 GBK 的不可映射字符
- nginx配置文件详细说明
- 从文件 I/O 看 Linux 的虚拟文件系统
- display_errors
- 插入排序
- 计算机网络面试大纲
- Codeforces Round #150 (Div. 2) C. The Brand New Function
- C++初学者
- 安装node.js,npm,mongodb
- POJ2377
- 如何在django查看一个group里的所有user
- 如何在Windows2008 Server服务器上开启Ping或者禁PING
- 调用系统相机拍照,获取原始图