• 插入排序


    算法思想

    1. 从第一个元素开始,该元素可以认为已经被排序
    2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
    3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
    4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    5. 将新元素插入到该位置后
    6. 重复步骤2~5

    动画演示:

    实现

    C++

    void insertSort(vector<int> &array)
    {
    	int len = array.size();
    
    	for (int i = 1; i < len; i++)
    	{
    		int j = i;
    		int x = array[j]; //要插入的数                   
    		while (j > 0 && x < array[j - 1])     //将大的数往后去,空出位置
    		{
    			array[j] = array[j - 1];
    			j--;
    		}
    		//插入
    		array[j] = x;                        
    	}
    }
    

    python

    def insertionSort(alist):
        for index in range(1,len(alist)):
            currentvalue = alist[index]
            position = index
            while position > 0 and alist[position -1] > currentvalue:
                alist[position] = alist[position -1]
                position = position - 1
            alist[position] = currentvalue
    

    总结

    稳定性:
    由于只需要找到不大于当前数的位置而并不需要交换,因此,直接插入排序是稳定的排序方法。

    适用场景:
    数组较大的时候不适用。但是,在数据比较少的时候,是一个不错的选择。
    一般做为快速排序的扩充。例如,在STL的sort算法和stdlib的qsort算法中,都将插入排序作为快速排序的补充,用于少量元素的排序。

    复杂度:
    (Oleft(n^{2} ight))

  • 相关阅读:
    Linux
    Linux
    JavaScript
    JavaScript
    Linux
    不可不说的Java“锁”事
    RabbitMQ公共配置
    求一个数字的补码
    项目中Controller的全局异常处理类
    如何较方便给上百张数据库表添加表字段
  • 原文地址:https://www.cnblogs.com/chay/p/10673303.html
Copyright © 2020-2023  润新知