直接插入排序

    xiaoxiao2021-03-25  76

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

     

    代码:

    python:

    def insert_sort(li):     for i in range(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).

     

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

    转载请注明原文地址: https://ju.6miu.com/read-17102.html

    最新回复(0)