【发布时间】:2021-03-29 04:07:15
【问题描述】:
我在this sort 的启发下实现了这个树视图快速排序算法。
我遇到了一个问题,即具有相同第一位数字的多个数字值相互叠加,我在下面显示了一个屏幕截图。
我想让它正确排序 (1,2,3,4,5,6,7,8,9,11)
我知道并且之前使用过here 解决方案,但是我不知道如何在我的快速排序版本中实施此修复。
这是我的代码:
def sort_upon_press(self, c):
self.arr = [(self.tree.set(k, c), k) for k in self.tree.get_children('')]
self.n = len(self.arr)
self.quickSort(self.tree, c, self.arr, 0, self.n-1, False)
def partition(self, arr,low, high):
i = (low-1)
pivot = arr[high]
print(pivot)
for j in range(low, high):
if arr[j] <= pivot:
i = i+1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return (i+1)
def quickSort(self, tv, col, arr, low, high, reverse):
if len(arr) == 1:
return arr
if low < high:
pi = self.partition(arr, low, high)
self.quickSort(tv, col, arr, low, pi-1, reverse=reverse)
self.quickSort(tv, col, arr, pi+1, high, reverse=reverse)
for index, (val, k) in enumerate(arr):
tv.move(k, '', index)
tv.heading(col, command=lambda: \
self.quickSort(tv, col, arr, low, high, not reverse))
if reverse == True:
arr_reverse = arr[::-1]
for index, (val, k) in enumerate(arr_reverse):
tv.move(k, '', index)
【问题讨论】:
-
您的值被排序为字符串而不是数字。列中总是有整数还是也可以是字符串?
-
@j_4321 在此列中,只有整数。
-
然后在排序前将值转换为
int -
@j_4321 什么值?
-
我传入行的树 ID 并通过附加/分离值应该按顺序排列的位置对其进行排序。树 ID 显示为
I001或I002之类的值,但值11显示为树 ID:I00A,这让我的系统崩溃了。我必须确保排序将值视为整数,但我不知道该怎么做。