快速排序2

这里采用的是算法导论上的快速排序算法,它的主要思想是:

递归快速排序不说了,主要介绍如何做partition,首先定义两个变量i和j,i的物理意义是表示小于pivot的最后一个元素,j的物理意义是不断向前走,直到比pivot小的元素,然后和i+1元素交换。最后,要把pivot放到合适的位置,由于i表示小pivot的最后一个元素,所以要让pivot和i+1元素交换。

代码如下:

package introjava;

public class QuickSort3 {
    public static void quickSort(int [] list, int p, int r){
        int q;
        if(p < r){
            q = partition(list, p, r);
            quickSort(list, p, q - 1);
            quickSort(list, q + 1, r);
        }
    }
    public static int partition(int []list, int p, int r){
        int i = p - 1;
        int pivot = list[r];
        
        for(int j = p; j < r; j++){
            if(list[j] <= pivot){
                i++;
                int temp = list[i];
                list[i] = list[j];
                list[j] = temp;
            }
        }
        int temp = list[i + 1];
        list[i + 1] = list[r];
        list[r] = temp;
        return i+1;
    }
    public static void main(String []args){
//        int [] list = {1,2,3,4,5,6};
        int [] list = {5, 2, 9, 3, 8, 4, 5, 5, 0, 1, 6, 7};
        
        for(int i = 0; i < list.length; i++)
            System.out.print(list[i] + " ");
        System.out.print("
");
        
        quickSort(list, 0, list.length - 1);
        
        for(int i = 0; i < list.length; i++)
            System.out.print(list[i] + " ");
    }
}
原文地址:https://www.cnblogs.com/hansonzhe/p/3596305.html