插入排序
来源:互联网 发布:深圳乐易网络怎么样 编辑:程序博客网 时间:2024/06/02 06:42
插入排序
主要用途
插入排序适用于少量元素的排序。时间复杂度 空间复杂度
过程分析
这里我们主要通过图解的方式详述插入排序的过程:见下图
这里选择 序列 {3,1,2,4,6,5 }作为初始序列,图中阴影部分表示下次要插入的序列中的元素。
1、原始序列中选择第一个元素作为初始序列,此例中3为初始序列,1为要插入的元素
2、首先比较1与3的大小,可以从图2 中看出由于1小于3,所以3向后移动1位,1插入当前位置即可。
3、从图2到图3的过程中,2首先跟3比较大小,由于2小于3,所以3向后移动1位,然后比较2与1的大小,2大于1所以 不必再向前比较大小(因为1在它左边的队列中已经是最 大的元素)。2插入到当前的位置即可。
4、依次类推知道整个队列排序完。
插入排序代码
C语言代码
#include"stdio.h"insert_sort(int *array,int length){int i,j,key = 0;for(i = 1; i < length; i++){key = array[i];j = i-1;while( j>=0 && array[j] > key){if(array[j] > key){array[j+1] = array[j];}j--;}array[j+1] = key;}}int main(){int array[] = {3,1,2,4,6,5},length = 0,i;length = sizeof(array)/sizeof(array[0]);insert_sort(array,length);for(i = 0;i<length;i++){printf("%d ",array[i]);}return 0;}
Java代码
public class insertSort {public static void insert_sort(Integer... array){for(int i = 1,j,key; i < array.length; i++){key = array[i];j = i-1;while(j>=0 && array[j] > key){if(array[j] > key){array[j+1] = array[j];}j--;}array[j+1] = key;}for(int i = 0;i<array.length;i++){System.out.print(array[i]+" ");}}public static void main(String[] args){Integer[] array={3,1,2,4,6,5};insert_sort(array);}}
算法分析
时间复杂度分析
这里根据算法导论中提供的思路:舍每条语句执行的时间代价为c,次数为n。
只考虑核心部分代码的时间复杂度: 代价 次数
for(i = 1; i < length; i++){ c1 nkey = array[i]; c2 n-1j = i-1; c3 n-1while( j>=0 && array[j] > key){ c4 sum(t(i))(2~n)if(array[j] > key){ c5 sum(t(i)-1)(2~n)array[j+1] = array[j]; c6 sum(t(i)-1)(2~n)}j--; c7 sum(t(i)-1)(2~n)}array[j+1] = key; c8 n-1}
T(n) = c1*n+c2*(n-1)+c3*(n-1)+c4*(sum(t(i))(2~n))+c5*(sum(t(i)-1)(2~n))+c6*(sum(t(i)-1)(2~n))+c7*(sum(t(i)-1)(2~n))+c8*(n-1);
经过整理:
最佳情况 :a*n -b
最坏情况:a*n^2+b*n+c
空间复杂度分析
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- **JQUERY** jQuery效果
- HttpContext.Current.Cache 与HttpRuntime.Cache的区别
- View的滑动冲突解决方案
- jQuery选择器
- 自定义view仿支付宝密码输入框
- 插入排序
- 日常笔记:vim
- 进程调度算法
- 分享一个好东西(一天精通MongoDB数据库)
- vim工作中常用的操作
- Python学习资料推荐
- 最小公倍数与最大公约数模板
- leetcode - Reverse Linked List
- 装出现epel-release >= 6 is needed by remi-release-6.5-1.el6.remi.noarch 解决办法