轉載請標明出處: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]);
}
}
}