Java快速排序

轉載請標明出處:http://blog.csdn.net/wu_wxc/article/details/51965365
本文出自【吳孝城的CSDN博客】

快速排序的思路:取數組第一個跟整個數組比較,分成大於等於這個第一個數的和小於第一個數的兩部分,再將這兩部分用同樣的方法進行比較,即遞歸,從而實現快速排序。

實現方法:將第一個數作爲比較數值key,然後在前後分別設置low和hight作爲標識,然後拿這個key從後面往前比較,直到找到第一個小於這個key的那個數,然後交換這兩個值,及hight–,交換完成後再拿這個key從low往後遍歷,及low++,直到low==hitht,這時整個數組被分成兩段,即大於等這個key的和小於這個key的兩部分,

Qsort.java

package cn.wuxiaocheng;

public class Qsort {

    public static void main(String[] args) {
        // 一個無序的數組
        int[] data = { 10, 99, 54, 23, 85, 62, 45, 89, 100 };

        QuickSort qs = new QuickSort();
        qs.data = data;
        // 傳入第一個數組的下標和數據長度-1
        qs.sort(0, qs.data.length - 1);

        qs.print();
    }

}

class QuickSort {
    public int data[];

    public void sort(int low, int hight) {
        if (low < hight) {
            // 將數組劃分爲兩段
            int result = partition(data, low, hight);
            // 對低數段進行遞歸排序
            sort(low, result - 1);
            // 對高數段進行遞歸排序
            sort(result + 1, hight);
        }
    }

    private int partition(int sortArray[], int low, int hight) {
        // 將數組的第一個數作爲比較數key
        int key = sortArray[low];

        while (low < hight) {
            while (low < hight && sortArray[hight] >= key) {
                hight--;
            }
            // 比比較數key小的數移到低端
            sortArray[low] = sortArray[hight];
            while (low < hight && sortArray[low] <= key) {
                low++;

            }
            // 比比較數大的數移到高端
            sortArray[hight] = sortArray[low];
        }
        // 比較值記錄到尾部,返回比較值的位置
        sortArray[low] = key;

        return low;
    }

    // 打印出結果
    public void print() {
        for (int i = 0; i < data.length; i++) {
            System.out.println(data[i]);
        }
    }

}

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章