我正在尝试跟踪这种快速排序算法:
https://pythonschool.net/data-structures-algorithms/quicksort/
但是有一组不同的数字 - [6,2,8,4,3,7,10]
一旦算法的左侧被排序,我很好,但在那之后我不理解递归类。
左侧完成并start = 0
和end = 0
后,以下一行会运行:
quicksort(myList, pivot+1, end)
当我从快速排序功能打印出开始值和结束值时:
Start = 2 and End = 1
Start = 3 and End = 2
Start = 4 and End = 6
我不明白start
和end
如何更改这些值。
任何人都可以解释如何以及为什么?
答案 0 :(得分:0)
您可以考虑更轻松地实施快速排序。例如,
frame.add(new JButton(new AbstractAction("Create Border "){
private static final long serialVersionUID = 1L;
private void createBorder(){
System.out.println(table.getSelectedColumn());
System.out.println(table.getSelectedRow());
System.out.println(table.getSelectedRowCount());
System.out.println(table.getSelectedColumnCount());
System.out.println(table.getSelectedRows()[0]);
System.out.println(table.getSelectedColumns());
}
@Override
public void actionPerformed(ActionEvent e){
createBorder();
}
}), BorderLayout.SOUTH);
frame.pack();
frame.setLocation(150,150);
frame.setVisible(true);
}
这个相当简单的实现很容易解释。
您正在基于任意选择的数据透视表对列表进行分区。在这种情况下my_list = [52,8,45,43,6,56,76,36,54,12,34,98,41,30]
def quicksort(arr):
high = []
low = []
pivot_list = []
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
for i in arr:
if i < pivot:
low.append(i)
elif i > pivot:
high.append(i)
else:
pivot_list.append(i)
high = quicksort(high)
low = quicksort(low)
return low + pivot_list + high
print quicksort(my_list)
[6, 8, 12, 30, 34, 36, 41, 43, 45, 52, 54, 56, 76, 98]
。然后你遍历列表,如果元素大于pivot(52),你将它放入'high'分区,如果它小于52,你就把它放入'low'分区。在一次运行之后(在我们运行arr[0] = 52
之前),我们有
high = quicksort(high)
然后我们在'低'和'高'分区上运行此快速排序功能。例如,对于高分区low = [8, 45, 43, 6, 36, 12, 34, 41, 30]
high = [56, 76, 54, 98]
pivot_list = [52]
。我们遍历高分区,如果元素小于pivot(56),我们将它放在一个新的低分区组中,该分区组是高分区的子组。如果元素大于56,那么我们将它放在 new 高分区中,该分区是高分区的子组。您可以将它视为从我们要排序的一个列表开始,然后分支到高分区和低分区,然后每个分区分支到它们自己的高分区和低分区。这就是递归的地方