快速排序-

package eleven;

import java.util.Random;

public class QuickSort {
    /**
     * 快速排序
     * 
     * @param num
     * @param left
     * @param right
     * @return
     */
    public static void printArray(int num[]) {
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + " ");
        }
        System.out.println();
    }

    /**
     * 采用随机key 当数组较少时,采用插入排序
     * 
     * @param num
     * @param left
     * @param right
     * @return
     */

    public static int[] quickSort(int[] num, int left, int right) {
        if (left < right) {
            // 采用随机数作为key,不采用第一个值,做法为:生成随机数index,将其余第一个数交换
            // int randomKey=Math.random()
            int randowKey = (int) (Math.random() * (right - left) + left);
            System.out.println(randowKey);
            int tmp = num[left];
            num[left] = num[randowKey];
            num[randowKey] = tmp;
            int key = num[left];
            int i = left;
            int j = right;
            while (i < j) {
                while (i < j && num[j] > key) {
                    j--;
                }
                num[i] = num[j];
                while (i < j && num[i] <= key) {
                    i++;
                }
                num[j] = num[i];
            }
            num[i] = key;
            printArray(num);

            quickSort(num, left, i - 1);
            quickSort(num, i + 1, right);
        }
        return num;
    }

    public static void main(String[] args) {
        int[] num = { 72, 6, 57, 88, 69, 56, 43, 67, 23, 87, 23, 12, 76, 88 };
        quickSort(num, 0, num.length - 1);

    }
}

6 12 57 88 69 56 43 67 23 87 23 72 76 88
6 12 23 23 43 56 57 67 69 87 88 72 76 88
6 12 23 23 43 56 57 67 69 87 88 72 76 88
6 12 23 23 43 56 57 67 69 72 88 87 76 88
6 12 23 23 43 56 57 67 69 72 88 87 76 88
6 12 23 23 43 56 57 67 69 72 88 87 76 88
6 12 23 23 43 56 57 67 69 72 88 87 76 88
6 12 23 23 43 56 57 67 69 72 76 87 88 88

posted @ 2016-01-18 16:14  程序猿进化之路  阅读(87)  评论(0)    收藏  举报