php和python的选择排序算法,图文讲解选择排序算法的原理及在Python中的实现
def sort_choice(numbers, max_to_min=True):
"""
我這沒有按照標準的選擇排序,假設列表長度為n,思路如下:
1、獲取最大值x,將x移動到列最后。[n1, n2, n3, ... nn]
2、將x追加到排序結果[n1, n3, ... nn, n2]
3、獲取排序后n-1個元素[n1, n3, ... nn],重復第一步,重復n-1次。
max_to_min是指從大到小排序,默認為true;否則從小到大排序。
對[8, 4, 1, 0, 9]排序,大致流程如下:
sorted_numbers = []
[8, 4, 1, 0, 9], sorted_numbers = [9]
[4, 1, 0, 8], sorted_numbers = [9, 8]
[1, 0, 4], sorted_numbers = [9, 8, 4]
[0, 1], sorted_numbers = [9, 8, 4, 1]
[0], sorted_numbers = [9, 8, 4, 1, 0]
"""
if len(numbers) <= 1:
return numbers
sorted_list = []
index = 0
for i in xrange(len(numbers) - index):
left_numbers = _get_left_numbers(numbers, max_to_min)
numbers = left_numbers[:-1]
sorted_list.append(left_numbers[-1])
index += 1
return sorted_list
def _get_left_numbers(numbers, get_max=True):
'''
獲取最大值或者最小值x,并且將x抽取出來,置于列表最后.
Ex: get_max=True, [1, 4, 3] ? [1, 3, 4]
get_max=False, [1, 4, 3] ? [4, 3 ,1]
'''
max_index = 0
for i, num in enumerate(numbers):
if get_max:
if num > numbers[max_index]:
max_index = i
else:
if num < numbers[max_index]:
max_index = i
numbers = numbers[:max_index] + numbers[max_index + 1:] + [numbers[max_index]]
return numbers
測試一下:
>>> get_left_numbers([0, 4, 0, 31, 9, 19, 89,67], get_max=True)
[0, 4, 0, 31, 9, 19, 67, 89]
>>> get_left_numbers([0, 4, 0, 31, 9, 19, 89,67], get_max=False)
[4, 0, 31, 9, 19, 89, 67, 0]
>>> sort_choice([0, 4, 0, 31, 9, 19, 89,67], max_to_min=False)
[0, 0, 4, 9, 19, 31, 67, 89]
>>> sort_choice([0, 4, 0, 31, 9, 19, 89,67], max_to_min=True)
[89, 67, 31, 19, 9, 4, 0, 0]
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
相關文章
相關視頻
總結
以上是生活随笔為你收集整理的php和python的选择排序算法,图文讲解选择排序算法的原理及在Python中的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: agv调度matlab程序,AGV调度方
- 下一篇: php求未知数怎么求,PHP的-输入未知