插入排序(insertion_sort)——Python实现

# 插入排序

# 作用:对给出的n个顺序不定的数进行排序

# 输入:任意数组A

# 输出:按顺序排列的数组A

# 时间复杂度 n(n-1) 至 (n(n-1))/2

# 插入排序过程

# 第一趟:选择第一个元素,之前没有其他元素可以比较,故放在第一位

# 第二趟:选择第二个元素,与前一个元素比较,若比之大,则不动;若比之小,则与之交换

# 第三趟:选择第三个元素,与前一个元素比较,若比之大,则不动;若比之小,则与之交换

#        直到该元素前面没有再比它小的数

# 每次循环确定一个数的相对位置,以此类推

 1 # 在此修改初始数据
 2 A = [12,56,92,-1,5,110,92,999,-39,21,76,33,56]
 3
 4 print(‘您的初始数据为:‘)
 5 print(A);print(‘\n‘*1)
 6 n = len(A)          # 用n获取数组长度
 7 i = 0               # 外循环时数组的下标
 8 j = 0               # 内循环时数组的下标
 9
10 while i <= n-1:
11     x = A[i]
12     j = i - 1
13     while j > -1 and A[j] > x:
14         A[j+1] = A[j]
15         j = j - 1
16     A[j+1] = x
17     i = i + 1
18     print(A)
19
20 print(‘调整后的数据为:‘)
21 print(A)

运行结果:

您的初始数据为:
[12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
调整后的数据为:
[-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 110, 999]

插入排序运行过程中数组A的变化情况:

 1 [12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
 2 [12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
 3 [12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
 4 [-1, 12, 56, 92, 5, 110, 92, 999, -39, 21, 76, 33, 56]
 5 [-1, 5, 12, 56, 92, 110, 92, 999, -39, 21, 76, 33, 56]
 6 [-1, 5, 12, 56, 92, 110, 92, 999, -39, 21, 76, 33, 56]
 7 [-1, 5, 12, 56, 92, 92, 110, 999, -39, 21, 76, 33, 56]
 8 [-1, 5, 12, 56, 92, 92, 110, 999, -39, 21, 76, 33, 56]
 9 [-39, -1, 5, 12, 56, 92, 92, 110, 999, 21, 76, 33, 56]
10 [-39, -1, 5, 12, 21, 56, 92, 92, 110, 999, 76, 33, 56]
11 [-39, -1, 5, 12, 21, 56, 76, 92, 92, 110, 999, 33, 56]
12 [-39, -1, 5, 12, 21, 33, 56, 76, 92, 92, 110, 999, 56]
13 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 110, 999]

简而言之,插入排序算法类似于打牌时的排序,从左到右按顺序选牌,然后插入到合适的位置。

原文地址:https://www.cnblogs.com/aiyou-3344520/p/11706375.html

时间: 2024-12-13 22:28:57

插入排序(insertion_sort)——Python实现的相关文章

插入排序(INSERTION_SORT)

插入排序(INSERTION_SORT) 1)原理 : 插入排序对于少量的元素排序是一个有效的算法.插入排序的工作方式像是在拿扑克牌一样,最开始的时候手里是空的,每抽到一张牌就将其在另一只手上按一定的规律排好序,直到所有的元素排列完成. 2)C语言实现 : #include<stdio.h> #include<cstdlib> void sortNum(int count, int *a) { for (int i = 1; i < count; i++) { for (in

插入排序之python实现源码

def insert_sort(old): for i in range(1, len(old)): for j in range(i, 0, -1): if(old[j] < old[j-1]): tmp = old[j] old[j] = old[j-1] old[j-1] = tmp # test case old = [2, 5, 3, 0, 2, 3, 0, 3] insert_sort(old) print old 插入排序的时间复杂度O(N^2)

直接插入排序的python实现

1 # -*- coding:utf-8 -*- 2 3 '''直接插入的python实现 4 时间复杂度O(n**2) 空间复杂度O(1) 稳定 5 6 思想:先将前两个元素排序,第三个元素插入前面已排好序列, 7 后面的元素依次插入之前已经排好序的序列 8 ''' 9 10 author = 'Leo Howell' 11 12 L = [89,67,56,45,34,23,1] 13 14 def direct_insert_sort(numbers): 15 for i in range

插入排序之python

插入排序( Insert sort) 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入: 由于不需要全部都比较完,所以排序速度优于冒泡和选择排序. #插入排序就像是斗地主摸牌 1.算法描述: 从第一个元素开始,该元素可以认为已经被排序: 取出下一个元素,在已经排序的元素序列中从后向前扫描: 如果该元素(已排序)大于新元素,将该元素移到下一位置: 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置: 将新元素插入到该位置后: 重复步骤2~5. 2.算法属性:

插入排序的python实现

import random import datetime def InsertSort(data) -> list: """ :param data: :return: """ length = len(data) if length == 0: return data start = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(start)

算法导论2.1 插入排序

插入排序 // insertion_sort.h not with template #include <iostream> #include <stdint.h> // INSERTION-SORT(A) // for j = 2 to A.length // key = A[j] // // Insert A[j] into sorted sequence A[1..j - 1]. // i = j - 1 // while i > 0 and a[i] > key

Python使用二分插入排序竟然比直接插入排序快99倍!

?? Python使用二分插入排序竟然比直接插入排序快99倍! 之前发布同一个算法,C++竟然比C快8倍! , 有同学提出是因为C++中使用了二分插入排序,于是用python比较了下两种排序差距有多大. 测试结果如下: Python insertion sort took time: 1:39:42.448904Python insertion sort with binary search took time: 0:01:13.263267 代码如下: import datetime impo

Python排序算法之直接插入排序

插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表. 比如,待排序列表为[49,38,65,97,76,13,27,49],则比较的步骤和得到的新列表如下: (带有背景颜色的列表段是已经排序好的,红色背景标记的是执行插入并且进行过交换的元素) 时间复杂度:O(n^2) 待排序:  [49,38,65,97,76,13,27,49] 第一次比较后:  [38,49,65,97,76,13,27,49]     第二个元

选择排序、插入排序、冒泡排序python实现

选择排序的时间复杂度为O(n^2),是不稳定的排序 冒泡排序的时间复杂度最好情况下为O(n),最坏情况下为O(n^2),平均情况下为O(n^2),是稳定的排序 插入排序的时间复杂度最好情况下为O(n),最坏情况下为O(n^2),,平均情况下为O(n^2),是稳定的排序 1.选择排序 def selection(lista): leng=len(lista); for i in range(0,leng): index=i; min=lista[i]; for j in range(i,leng)