插入排序

来源:互联网 发布:深圳乐易网络怎么样 编辑:程序博客网 时间: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
原创粉丝点击