这里自定义列表:[9,2,3,4,5,6,7,8,1]
设定值:5
代码如下:
#将列表[9,2,3,4,5,6,7,8,1]按照元素与5的距离从小到大排序
#求列表中元素与5的差的绝对值,表示距离
#如果距离相等,则按照元素大小从小到大排序
#定义一个全局变量
Standard = 5
#先求出列表元素的差值并放入原数组中
def new_arr(arr):
#newarr = [] #新建列表
for i in range(len(arr)):
arr[i] = arr[i]-Standard #将差值放入初始列表[-4,-3,-2,-1,0,1,2,3,4]
return arr
#对差值进行选择排序,从而对相应的元素进行排序
#选择排序首先先找出列表中的最小值
def findSmallest(arr):
small = arr[0] #先设定初始最小值为arr[0]
small_index = 0 #设定初始最小值对应的索引为0
for i in range(1,len(arr)):
#if判定如果列表中有距离相同的元素,则将元素按照从小到大排序
if (abs(arr[i]) < abs(small)) or (abs(arr[i]) == abs(small) and arr[i] < 0):
small = arr[i]
small_index = i
return small_index
#然后根据最小值函数对列表进行选择排序
def SelectionSort(arr):
arr = new_arr(arr)
new = []
for i in range(len(arr)):
small = findSmallest(arr)
new.append(arr.pop(small)+Standard)
return new
list1 = [9,2,3,6,5,4,7,8,1]
print(SelectionSort(list1))
输出结果为:
[5, 4, 6, 3, 7, 2, 8, 1, 9]
欢迎有更好的算法建议,谢谢!
网友评论