经典排序算法动画详解----插入排序

插入排序

基本思想:
每次选择一个元素,并且将这个元素和整个数组中的所有元素进行比较,然后插入到合适的位置。
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
⒈ 从第一个元素开始,该元素可以认为已经被排序(先假定第一个待排序元素已排好序)
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5
图解在这里插入图片描述
最初假定3为有序序列,把3以后的元素(例如5)依次和它前面的元素比较(对于5,前面只有3一个数字,只和3比较,5比3大,故比较后位置排在3后)。

时间复杂度
时间复杂度 O(n^2)具有稳定性
代码实现
C语言

void insertion_sort(int arr[], int len){
 2         int i,j,key;//i为序列中待排序元素的在序列中的初始序号
 3         for (i=1;i<len;i++){
 4                 key = arr[i];//key为待排序元素数值
 5                 j=i-1;
 6                 while((j>=0) && (arr[j]>key))//当key前面还有元素需要比较(j>=0)并且此元素数值大于key
                   {
 7                         arr[j+1] = arr[j];//将该元素移到下一位置
 8                         j--;
 9                 }
10                 arr[j+1] = key;//否则,将该元素插入
11         }
12 }

python

def insert_sort(lst):
    n = len(lst)
    if n == 1: return lst
    for i in range(1,n):
        for j in range(i, 0, -1):
            if lst[j] < lst[j-1]: 
                lst[j], lst[j-1] = lst[j-1], lst[j]
            else:
                break
    return lst

ps:
该系列其他博文:
经典排序算法动画详解——堆排序
以上

猜你喜欢

转载自blog.csdn.net/qq_45955041/article/details/104881805