一、基本原理
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数
据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法
## 算法步骤、
⒈ 从有序数列{a1}和无序数列{a2,a3,…,an}开始进行排序;
⒉ 处理第i个元素时(i=2,3,…,n),数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;
⒊ 重复第二步,共进行n-i次插入处理,数列全部有序。
二、 代码实现
def insert_sort(arr):
#建立一个空列表,存储排好的数据,并且初始化为arr[0]
brr=[]
brr.append(arr[0])
#依次取得无序数列arr{a2,a3,…,an}中的元素进行排序
for i in range(1,len(arr)):
#每次遍历brr列表,寻找满足条件的元素
for j in range(0,len(brr)):
if arr[i] < brr[j]: #如果当前arr中的值,比brr的小,直接插入
brr.insert(j,arr[i])
break
if arr[i] >= brr[j]: #如果当前arr中的值,比brr的大,
# 需要判断是否已经到达brr的队尾,如果是,则插入
if j< len(brr)-1:
continue
elif j==len(brr)-1:
brr.append(arr[i])
return brr #返回已经排好的列表
a=[3,5,1,9,0,2,4]
b=insert_sort(a)
print(a)
print(b)
三、 性能分析
算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法.
最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数
据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法
## 算法步骤、
⒈ 从有序数列{a1}和无序数列{a2,a3,…,an}开始进行排序;
⒉ 处理第i个元素时(i=2,3,…,n),数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;
⒊ 重复第二步,共进行n-i次插入处理,数列全部有序。
二、 代码实现
def insert_sort(arr):
#建立一个空列表,存储排好的数据,并且初始化为arr[0]
brr=[]
brr.append(arr[0])
#依次取得无序数列arr{a2,a3,…,an}中的元素进行排序
for i in range(1,len(arr)):
#每次遍历brr列表,寻找满足条件的元素
for j in range(0,len(brr)):
if arr[i] < brr[j]: #如果当前arr中的值,比brr的小,直接插入
brr.insert(j,arr[i])
break
if arr[i] >= brr[j]: #如果当前arr中的值,比brr的大,
# 需要判断是否已经到达brr的队尾,如果是,则插入
if j< len(brr)-1:
continue
elif j==len(brr)-1:
brr.append(arr[i])
return brr #返回已经排好的列表
a=[3,5,1,9,0,2,4]
b=insert_sort(a)
print(a)
print(b)
三、 性能分析
算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法.
最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上 (n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)