快速排序递归

时间:2017-02-23 14:22:49

标签: python quicksort

我正在尝试跟踪这种快速排序算法:

https://pythonschool.net/data-structures-algorithms/quicksort/

但是有一组不同的数字 - [6,2,8,4,3,7,10]

一旦算法的左侧被排序,我很好,但在那之后我不理解递归类。

左侧完成并start = 0end = 0后,以下一行会运行:

 quicksort(myList, pivot+1, end)

当我从快速排序功能打印出开始值和结束值时:

Start = 2 and End = 1
Start = 3 and End = 2
Start = 4 and End = 6

我不明白startend如何更改这些值。

任何人都可以解释如何以及为什么?

1 个答案:

答案 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 高分区中,该分区是高分区的子组。您可以将它视为从我们要排序的一个列表开始,然后分支到高分区和低分区,然后每个分区分支到它们自己的高分区和低分区。这就是递归的地方