一:关于冒泡排序、选择排序、插入排序算法python的实现
1、冒泡排序:
冒泡排序简单的想就是将一组无序列表,将相邻的两个数进行比较,将这两个数较大的数向上排列,类似于水中的气泡一样,越大的数与向上走,此时区分出已经排序完成的区域,和待要排序的区域,我们只需要在待要排序的区域进行重复性工作。如下图所示
图上的黄色背景指的是列表的坐标,整个过程就是,相邻的两个元素进行比较,如果前一个数比后一个数大,那么交换位置,则再用此时交换过的数据再依次进行比较:
"""
这里的list_data是指用户输入需要排序的列表
j 是指从列表的下表,从0开始到列表长度减1为止
"""
for i in range(len(list_data) - 1):
exchange = False
for j in range(0, len(list_data) - i - 1):
"""
如果前后一个比后一个的数大,则是升序排列
"""
if list_data[j] > list_data[j + 1]:
list_data[j], \
list_data[j + 1] = list_data[j + 1], \
list_data[j]
exchange = True
print(list_data)
if not exchange:
return
list_Data = [9,6,8,5,4,10,2,3,7]
Bubble_Sort(list_Data)
print(list_Data)
1 [6, 8, 5, 4, 9, 2, 3, 7, 10]
2 [6, 5, 4, 8, 2, 3, 7, 9, 10]
3 [5, 4, 6, 2, 3, 7, 8, 9, 10]
4 [4, 5, 2, 3, 6, 7, 8, 9, 10]
5 [4, 2, 3, 5, 6, 7, 8, 9, 10]
6 [2, 3, 4, 5, 6, 7, 8, 9, 10]
7 [2, 3, 4, 5, 6, 7, 8, 9, 10]
2、选择排序
选择排序简单思路就是,第一种:我们从一组无序的列表中,假定第一个下表为零的数为最小的那个数,然后依次进行对比,将已经查找的数字,我们放到有序区,将没有对比的数放入到无序区。在操作过程中,我们操作的是下标而不是列表的数。第二种:遍历一遍,找出最小的那个数,然后将最小的数存放在新列表的第一个,但这样的话考虑到很浪费资源,如果数据量很大的话,再实际生产环境中会出现内存爆满的情况,所以在这里建议用第一种方式进行排列。
# 选择排序
def selection_sort(list_Data):
"""
:param list_Data:
:return: 选择排序 核心点主要是有序区,无序区,查找到无序区最小的数
1、第一个次记录最小的数,放到第一个位置
2、第二次在无序区查找最小的数,放到第二个位置
"""
for i in range(len(list_Data) - 1):
# 假定第一个数是最小的,这时候再查看后面的数
mix_index = i
print(mix_index)
for j in range(i + 1, len(list_Data)):
# 如果后面的一个数小于 我们假定第一个数
if list_Data[j] < list_Data[mix_index]:
# 然后将 两个数的下表进行交换
mix_index = j
# 判断是否是最后一个数,那么将两个数交换下
if mix_index != i:
mix_index[j], mix_index[j + 1] = mix_index[j + 1], mix_index[j]
3、插入排序
“”"
插入排序的思路就是,假定第一个数已经排序好了,然后从第二个数开始与第一个数拍好的序列进行对比,此时第一个数与第二个数已经安大小排序好了,然后用第三个数与前两个数进行对比,插入到比他前面小的数后面,比他的数后面,具体实现就是 从列表小标 1的位置开始对比
def insert_sort(list_Data):
for i in range(1, len(list_Data)):
j = i - 1
if list_Data[j] > list_Data[i]:
# 待排序的变量
temp = list_Data[i]
print("当前的值:", temp)
list_Data[i] = list_Data[j]
j = j - 1
while j >= 0 and list_Data[j] > temp:
list_Data[j + 1] = list_Data[j]
j = j - 1
list_Data[j + 1] = temp