插入排序是一种简单直观且稳定的排序算法。
将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。
基本思想:
每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的列表中适当位置上,直到全部插入完为止。
将排序的数组分成两部分:第一部分已排好序的元素,第二部分包含即待插入元素。在排序过程中,分别从待插入元素中取出元素,插入到已排好序的元素列表中。
分类:
直接插入排序,二分插入排序(又称折半插入排序)
二分插入排序在后面的文章会写到。
直接插入排序
实例,将用户输入的列表按照从小到大排列
思路:
<1> 将列表分为两部分,一部分为已排序好的元素,另一部分为待排序的元素。(若此列表无已排好的元素,直接将第一个元素视为已拍好的部分);
<2> 对待排序的部分进行遍历,从第一个开始往已排好的部分进行插入;
<3> 假设待排序的元素坐标为 i ,则已排好序的最后一位坐标为 j = i-1;
<4> 将 i 与 j 坐标所对应的元素大小进行比较,若待排元素 i 小,则将此时的待排元素储存为临时变量,将已排好的元素 j 向后移动一位;
<5> 继续向已排好序列前方进行寻找比较。此过程中,比临时变量大的元素均向后移一位,直到找到比临时变量小或者到达列表顶端为止。
<6> 将刚才的临时变量赋值到合适的位置。
代码实现:
def
Sorting
(
self
)
:
len_list
=
len
(
new_list
)
for
i
in
range
(
0
,
len_list
-
1
)
:
j
=
i
-
1
if
new_list
[
i
]
<
new_list
[
j
]
:
temp
=
new_list
[
i
]
new_list
[
i
]
=
new_list
[
j
]
j
-=
1
while
j
>
0
and
new_list
[
j
]
>
temp
:
new_list
[
j
+
1
]
=
new_list
[
j
]
j
-=
1
new_list
[
j
+
1
]
=
temp
new_list
=
list
(
input
(
'please input new numbers:'
)
)
Sorting
(
new_list
)