将列表按照元素与设定值的距离从小到大排列

2020-03-26  本文已影响0人  吃鱼喵了个鱼

这里自定义列表:[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]

欢迎有更好的算法建议,谢谢!

上一篇 下一篇

猜你喜欢

热点阅读