插入排序

插入排序(Insertion Sort)

插入排序的过程是

  • 首先假设队列左边的元素是已经排序过的元素

  • 依次遍历已排序过的元素右边的元素,将该元素与左边已排序的元素做比较,这样左侧已排序的元素个数就会依次增加

  • 重复第二步,直到所有的元素全部排序完成

 

简单来说,插入排序很像是打扑克的理牌过程。我们手里的牌是已经排序过的,每次新抓一张牌,就将牌插入到手里已排序的牌中的合适位置,保证手里的牌一直是排序过的。

  • 最优时间复杂度:O(n) (升序排列,序列已经处于升序状态)
  • 最坏时间复杂度:O(n2)
  • 稳定性:稳定

 

# C
#include<stdio.h>
insertsort(int *k,int n)             /*直接插入排序*/
{
    int i,j;
    int temp;
    for(i=1;i<n;i++)
    {
        temp = k[i];                //将要比较的值先绶存起来留出一个空位,方便移动
        j = i - 1;
        while(j>=0 && k[j]>temp)    //比较直到出现比temp大的值,或向前找到头
        {
            k[j+1] = k[j];            //将前面的值往后移
            j--;
        }
        k[j+1] = temp;                 //插在a[j]的后面
    }
}
# Python while语句 13行代码
def insert_sort(data):
    length = len(data)
    i = 1       # 从位置1开始向右遍历,因为我们假设位置0上的元素是已经排序好了的
    while i < length:
        j = i  # j代表当前已排序的数字的结束位置
        while j > 0:  # j < 0时证明已经遍历完了已排序的部分
            if data[j-1] > data[j]:
                data[j], data[j-1] = data[j-1], data[j]  # 交换,找到合适的位置插入
            j -= 1  # 持续遍历已排序的部分
        i += 1   #下一个元素

data1 = [6, 5, 3, 1, 8, 7, 2, 4]
insert_sort(data1)
print(data1)
# Python for语句 8行
def insert_sort(data):
    for i in range(1, len(data)):  # 从第二个位置,即下标为1的元素开始向前插入
        for j in range(i, 0, -1):  # 特别重要,注意range的参数,从第i个元素开始向前比较,如果小于前一个元素,交换位置
            if data[j-1] > data[j]:
                data[j], data[j-1] = data[j-1], data[j]

data1 = [6, 5, 3, 1, 8, 7, 2, 4]
insert_sort(data1)
print(data1)
posted @ 2019-03-26 21:49  你蜂哥哥  阅读(147)  评论(0编辑  收藏  举报