直接插入排序

来源:互联网 发布:旅游 本质知乎 编辑:程序博客网 时间:2024/06/04 19:30

直接插入排序:假设一个序列中前n个元素为有序的序列,则将长度为n+1的序列排序的方法是:将第n+1个元素同前n个有序序列中的元素依次比较,找到其应该放入的位置后直接插入。

 

代码:

python:

def insert_sort(li):
    for i inrange(1,len(li)):\\从第二个元素开始遍历
        key = li[i]\\保存当前元素
        j = i-1
       
whilej >= 0 and li[j]> key:\\若前一个元素大于当前元素
            li[j+1] =li[j]\\前前一个元素后移一位
            j -= 1
       
li[j+1] = key\\将当前元素插入到正确位置
    returnli

 

JAVA:

public void sort(){

        for(int i=1; i<this.li.length; i++){

             int key = this.li[i];

             int j = i-1;

             while(j >=0 && this.li[j] > key){

                 this.li[j+1] = this.li[j];

                 j--;

             }

             this.li[j+1] = key;

        }

    }

 

C++:

void insert_sort(int *li,int n){

    for(int i=1;i<n; i++){

        int key = li[i];

        int j = i-1;

        while(j>=0 && li[j]>key){

             li[j+1]= li[j];

             j--;

        }

        li[j+1] =key;

    }

}

 

时间复杂度分析: 对整个序列排序需要进行两次循环,内层循环是第n个元素需要一次同前面n-1个元素进行比较并交换,外层循环则确定当前需要排序的元素是哪个。因此其时间复杂度为O(n2).

 

稳定性分析:同冒泡排序类似,直接插入排序只会在相邻元素间进行比较并交换,若相邻元素相同则不会进行交换,不会改变排序前后元素的相对位置,所以直接插入排序也是稳定的。

0 0