第七章 快速排序

package chap07_Quick_Sort;

import static org.junit.Assert.*;

import java.util.Arrays;

import org.junit.Test;

public class SortAlgorithms {
    /**
     * 快速排序算法
     * 
     * @param n
     */
    static void quickSort(int[] n) {
        int from = 0;
        int to = n.length;
        // quickSort(n, from, to);
        quickSort1(n, from, to);

    }

    /**
     * 快速排序的递归实现,将n从start到end之间的数字排序(不包括end)
     * 
     * @param n
     * @param start
     * @param end
     */
    static protected void quickSort(int[] n, int start, int end) {
        if (start < end - 1) {
            int a;
            a = partition(n, start, end);

            quickSort(n, start, a);
            quickSort(n, a, end);
        }
    }

    /**
     * 快速排序的迭代实现
     * 
     * @param n
     * @param start
     * @param end
     */
    static protected void quickSort1(int[] n, int start, int end) {
        int a = partition(n, start, end);
        int b = a;
        while (start < a - 1) {
            a = partition(n, start, a);
        }
        while (b < end - 1) {
            b = partition(n, b, end);
        }
    }

    /**
     * 分割(快速排序中对数组的分割)
     * 
     * @param n
     * @param start
     * @param end
     * @return
     */
    protected static int partition(int[] n, int start, int end) {
        int p = end - 1;
        int s = start;// s位于大于a[p]和小于a[p]之间的位置
        int tmp;
        for (int i = start; i < end; i++) {
            if (n[i] < n[p]) {
                tmp = n[i];
                n[i] = n[s];
                n[s] = tmp;
                s++;
            }
        }
        {
            tmp = n[s];
            n[s] = n[p];
            n[p] = tmp;
        }
        return s;
    }

    @Test
    public void testName() throws Exception {
        int[] a = { 13, 19, 9, 5, 12, 8, 7, 4, 21, 2, 6, 11 };
        // System.out.println(Arrays.toString(a));
        // partition(a, 0, 12);
        quickSort(a);
        System.out.println(Arrays.toString(a));
    }
}
posted @ 2014-06-10 19:17  JintaoXIAO  阅读(162)  评论(0编辑  收藏  举报