python正负数排序_带负数的Python排序列表
为了通过练习来学习python,我尝试使⽤python实现并测试快速排序算法。
实现本⾝并不困难,但是排序的结果有些令⼈费解:
当我对列表排序时
['35','-1','-2','-7','-8','-3','-4','20','-6','53']
结果给了我
['-1','-2','-3','-4','-6','-7','-8','20','35','53']
所以列表是按相反的顺序排序的,⽽负整数是按相反的顺序排序的。
我怀疑这可能是因为我正在对从⽂件中读取的int列表进⾏排序,⽽int的类型实际上不是int⽽是其他类型(可能是string)的问题。我可以做些什么来解决这个问题?
下⾯是快速排序实现的代码#quicksort -> the conquer part of the algorithm
def quicksort(input_list, start_index, end_index):
if start_index < end_index:
#partition the list of integers.
pivot = partition(input_list, start_index, end_index)
#recursive call on both sides of the pivot, that is excluding the pivot itself
quicksort(input_list, start_index, pivot-1)
quicksort(input_list, pivot+1, end_index)
return input_list
#divide part of the algorithm
def partition(input_list, start_index, end_index):
#declare variables required for sorting
pivot = input_list[start_index]
left = start_index + 1
快速排序python实现right = end_index
sorted = False
while not sorted:
#break condition so that left index is crossed with right index
#or if the value of left crosses the pivot value
while left <= right and input_list[left] <= pivot:
#increment left index
left = left + 1
#break the loop when right and left indexes cross
#or if the right value crosses the pivot value
while right >= left and input_list[right] >= pivot:
right = right-1
if right < left:
sorted = True
else:
#swap places for left value and the right value cause they are not in order
temp = input_list[left]
input_list[left] = input_list[right]
input_list[right] = temp
#swap the value at start index with what's now at the right half. Then return right for the new pivot temp = input_list[start_index]
input_list[start_index] = input_list[right]
input_list[right] = temp
return right
如有任何帮助,我们将不胜感激。谢谢⼤家的时间和帮助。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论