这样的插入排序

Posted 数据结构那些事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这样的插入排序相关的知识,希望对你有一定的参考价值。

插入排序的基本思想是:将数组的第一个数认为是有序数组,从后往前(从前往后)扫描该有序数组,把数组中其余n-1个数,根据数值的大小,插入到有序数组中,直至数组中的所有数有序排列为止。这样的话,n个元素需要进行n-1趟排序!!!


当前有一组待排序序列,大部分是有序的,请问哪种排序方式更适合?
答 :直接插入排序
时间复杂度:
最坏情况(当数据无序) O(n^2)
最好情况(当数据有序) O(n)
空间复杂度:O(1)
稳定性:稳定




void insert_sort(int a[],int n) {

    int i,j;

    for(i=1; i<n; i++) { //循环从第2个元素开始

        if(a[i]<a[i-1]) {

            int temp=a[i];

            for(j=i-1; j>=0 && a[j]>temp; j--) {

                a[j+1]=a[j];

            }

            a[j+1]=temp;//此处就是a[j+1]=temp;

        }

    }

}

  

int main() {

    int a[8]= {70,50,30,20,10,70,40,60};

    int n=7;

    insert_sort(a,n);

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

        printf("%d ", a[i]);

    }

    return 0;

}


以上是关于这样的插入排序的主要内容,如果未能解决你的问题,请参考以下文章

原来「插入排序」面试官爱考是因为这样~~

//插入法排序

排序算法——直接插入排序

希尔排序法

折半(二分)插入排序

排序算法1--插入排序--直接插入排序