插入排序的具体实现及其原理

Posted 猿来客

tags:

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


插入排序的具体实现及其原理


在上次的学习过程中,相信大家已经对于插入排序的算法已经有了初步认识!接下来我们看看插入排序具体怎么实现!

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。

它的工作原理:是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序的具体实现及其原理


算法分析:


插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入


插入排序的基本思想是:


将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)


插入排序的具体实现及其原理





C语言实现

void insertion_sort(int arr[], int len){
        int i,j,key;
        for (i=1;i<len;i++){
                key = arr[i];
                j=i-1;
                while((j>=0) && (arr[j]>key)) {
                        arr[j+1] = arr[j];
                        j--;
                }
                arr[j+1] = key;
        }
}



C++ 语言

void insertion_sort(int arr[],int len){
        for(int i=1;i<len;i++){
                int key=arr[i];
                int j=i-1;
                while((j>=0) && (key<arr[j])){
                        arr[j+1]=arr[j];
                        j--;
                }
                arr[j+1]=key;
        }
}





Python 代码实现

def insertionSort(arr):
    for i in range(len(arr)):
        preIndex = i-1
        current = arr[i]
        while preIndex >= 0 and arr[preIndex] > current:
            arr[preIndex+1] = arr[preIndex]
            preIndex-=1
        arr[preIndex+1] = current
    return arr





Java 代码实现

public class InsertSort implements IArraySort {

    @Override
    public int[] sort(int[] sourceArray) throws Exception {
        // 对 arr 进行拷贝,不改变参数内容
        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);

        // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
        for (int i = 1; i < arr.length; i++) {

            // 记录要插入的数据
            int tmp = arr[i];

            // 从已经排序的序列最右边的开始比较,找到比其小的数
            int j = i;
            while (j > 0 && tmp < arr[j - 1]) {
                arr[j] = arr[j - 1];
                j--;
            }

            // 存在比其小的数,插入
            if (j != i) {
                arr[j] = tmp;
            }

        }
        return arr;
    }
}





看了这么多不知道大家发现一个共同点吗?所有代码都是围绕这句话来展开的:

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

看不懂没关系!边敲边练就明白了!

插入排序的具体实现及其原理



好了,啰里啰嗦的说了这么多,该和大家说再见了!

想看更多资讯请留言告诉我们

喜欢我们的欢迎大家转发评论和收藏!

我是猿来客,一只关注科技的猿!



插入排序的具体实现及其原理




插入排序的具体实现及其原理

球分享

球点赞

球在看

以上是关于插入排序的具体实现及其原理的主要内容,如果未能解决你的问题,请参考以下文章

直接插入排序法原理及其js实现

深入浅出理解排序算法系列 插入排序算法的实现与性能分析

九大排序算法及其实现- 插入.冒泡.选择.归并.快速.堆排序.计数.基数.桶排序

插入排序及其优化

选择排序的具体实现及其原理

手撕插入排序及其优化(希尔排序)