此基本代码来源于网络并作稍许修改
首先以最后一个数字point作为标准,把小于point的数字放在point的左面,大于point的放在右边,此时得出point的位置q,然后再一次以q为分界线,分而治之。
package com.ufida.practice.suanfa.sort; public class QuickSoft { public static void main(String[] args) { QuickSoft ms = new QuickSoft(); int len = 10; int a[] = { 5, 1, 2, 9, 10, 0, 8, 4, 7, 6 }; ms.qsort(a, 0, len - 1); System.out.println("排序后的数组如下:"); for (int i : a) System.out.println(i); } public void qsort(int a[], int p, int r) { if (p < r) { int q = partition(a, p, r); qsort(a, p, q - 1); qsort(a, q + 1, r); } } private int partition(int a[], int p, int r) { int point = a[r]; int index = p; for (int i = index; i < r; ++i) { if (a[i] - point <= 0) { swap(a, index++, i); } } swap(a, index, r); return index; } private void swap(int a[], int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } }