排序算法——插入排序

介绍

从头实现插入排序。
插入排序是一种比较简单的排序方式通过将新的元素插入到已经排好的序列中来完成排序的目的。其最坏时间复杂度为 O ( n 2 ) O(n^2) O(n2),最好时间复杂度为 O ( n ) O(n) O(n),平均时间复杂度我为 O ( n 2 ) O(n^2) O(n2). 是一种比较基础而又低效的排序算法,在数据量较小时可以使用,此外,插入排序是稳定的。


实现

步骤

  • 将数组第一个元素作为已排序序列。
  • 依次遍历后续元素,将每个元素与以排好序列中的元素依次比较,直到找到一个合适的位置将其插入进去。

图解

[17,5,23,12]排序。

17(0索引)视为已排序序列,从5(1索引)开始进行插入排序。

image-20210429231317261

17比5更大,将5插入到17前面,现在已排序的元素为[5,17]

image-20210429231645763

对元素23进行排列,23比17大,直接插到其后面,现在已排序数组为:[5,17,23]

image-20210429231939026

最后是元素12,依次对比23,比其小,前移,再对比17,依然小,再前移,比5大,插入到5的后面,整个排序完成。

image-20210429232431402


示例

public class InsertSort {
    public static void main(String[] args) {
        int[] arr = {92, 88, 49, 25, 76, 17, 61, 9, 10, 69};
        int j;
        int t;
        for (int i = 1; i < arr.length; i++) {
            j = i;
            while (arr[j - 1] > arr[j]) {
                t = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = t;
                j--;
                if (j == 0) {
                    break;
                }
            }
        }
        for (int i : arr) {
            System.out.println(i);
        }
    }
}
[out]:
9
10
17
25
49
61
69
76
88
92
def insertion_sort(a):
    for i in range(1, len(a)):
        j = i
        while a[j - 1] > a[j]:
            a[j - 1], a[j] = a[j], a[j - 1]
            j -= 1
            if j == 0:
                break

    return a


if __name__ == '__main__':
    arr = [66, 93, 98, 96, 38, 8, 74, 56, 64, 51]
    arr = insertion_sort(arr)
    print(arr)
    
[out]:
[8, 38, 51, 56, 64, 66, 74, 93, 96, 98]

1]
arr = insertion_sort(arr)
print(arr)

[out]:
[8, 38, 51, 56, 64, 66, 74, 93, 96, 98]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值