二. 选择排序(SelctionSort)
基本思想:
第1趟,在待排序记录r1 ~ r[n]中选出最小的记录,将它与r1交换;第2趟,在待排序记录r2 ~ r[n]中选出最小的记录,将它与r2交换;以此类推,第i趟在待排序记录r[i] ~ r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
寻找最小位数的序号,排在第一位,与冒泡不同的是,选择是在找到最小值后进行调换位置,把最小值排在前面,冒泡是两两比较,只要小两个就立马换位置
可以理解为选择排序是把,最小的找出来,放在前面;冒泡是不断比较调整位置把最小的换到前面。
def select_sort(lists):
# 选择排序
count = len(lists)
for i in range(0, count):
min = i
# 寻找最小位数的序号,排在第一位
for j in range(i + 1, count):
if lists[min] > lists[j]:
min = j
lists[min], lists[i] = lists[i], lists[min]
return lists
# 以序号为依据
def Selectionsort1():
A = [-9, -8, 640, 25, 12, 22, 33, 23, 45, 11, -2, -5, 99, 0]
for i in range(len(A)):
min = i
for j in range(i + 1, len(A)): # 上一个值右边的数组
if A[min] > A[j]: # 使min为最小值,遇到比min小的值就赋值于min
min = j
A[i], A[min] = A[min], A[i] # 交换最小值到左边
print ('Selectionsort1排序后的数组:', A)
# 以数值为依据
def Selectionsort2():
A = [-9, -8, 640, 25, 12, 22, 33, 23, 45, 11, -2, -5, 99, 0]
counter = 0 # 记录循环次数和位置
array = []
for i in A:
counter += 1
for j in A[counter:]: # 缩小范围
if i > j: # 使i为最小值
i = j
A.remove(i)
A.insert(counter - 1, i)
# 把最小值置于列表左边,避免重复比较
array.append(i)
print('Selectionsort2排序后的数组:', array)
Selectionsort1()
Selectionsort2()