排序—快速排序

此基本代码来源于网络并作稍许修改

 首先以最后一个数字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;
    }

}
因为年轻,所有没有失败。
原文地址:https://www.cnblogs.com/wangchy0927/p/2845760.html