排序三 直接插入排序

直接插入排序(Straight Insertion Sort)

直接插入排序:每步将一个待排序的记录,按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。—百度百科

  • 时间复杂度:最好 O(n)=O(n);平均O(n)=O(n²);最差O(n)=O(n²)
  • 空间复杂度:O(n)=O(1)
  • 稳定性:    稳定

算法描述

设数组为a[n],i = 1。
1. a[0..i-1]为有序区,现需要插入a[i]到a[0…i-1]。
2. 用a[i]的值与a[1..n-1]中元素进行大小比较,找到插入位置将a[i]插入,原插入位置上的元素依次后移。
3. i++。若i < n则执行1。否则排序结束。

Insertion Sort
图片来自维基百科

直接插入排序示例

数组S: [9,1,5,3,8,7]
第一趟:[(1,9),5,3,8,7] –index=1
第二趟:[(1,5,9,)3,8,7] –index=2
第三趟:[(1,3,5,9),8,7] –index=3
第四趟:[(1,3,5,8,9),7] –index=4
第五趟:[(1,3,5,7,8,9)] –index=5

示例代码

public static InsertSort(int[] S){  //C#
    for (int i = 1; i < S.Length; i++){
        for (int j = i; j > 0 && S[j-1] > S[j]; j--){
            S.Swap(j - 1,j);
        }
    }
}
def insert_sort(s):  #Python
    for i in range(1, len(s)):
        for j in range(i, 0, -1):
            if s[j-1] <= s[j]:
                break
            s[j-1], s[j] = s[j], s[j-1]

文中若有什么错误,欢迎留言指正。

转载请保留出处:http://blog.csdn.net/x1060549/article/details/78779093

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值