栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

快速排序Java版本

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

快速排序Java版本

出处:算法第四版
 

public class QuickSort {
    public static void quickSort(int[] a) {
        helper(a, 0, a.length - 1);
    }

    private static void helper(int[] a, int lo, int hi) {
        if (hi <= lo) {
            return;
        }
        // 这一步中,选取切分元素,再根据切分元素调整整个数组
        int j = partition(a, lo, hi);
        // 每次调整后打印下整个数组
        for (int num : a) {
            System.out.print(num + " ");
        }
        // finish print
        System.out.println();
        // 返回排序后的切分元素,再以切分元素分开左右两边分别排序
        helper(a, lo, j - 1);
        helper(a, j + 1, hi);
    }

    private static int partition(int[] a, int lo, int hi) {
        int i = lo;
        int j = hi + 1;
        // 选择切分元素
        int value = a[lo];
        while (true) {
            // 从左到右找到第一个小于切分元素的元素index后停止
            while (a[++i] < value) {
                if (i == hi) {
                    break;
                }
            }
            // 从右到左找到第一个大于切分元素的元素index后停止
            while (value < a[--j]) {
                if (j == lo) {
                    break;
                }
            }
            // 被注释的写法冗余
            // 从左到右找到第一个小于切分元素的元素index后停止
//            while (a[i] < value && i < a.length) {
//                i++;
//                if (i == hi) {
//                    break;
//                }
//            }
//            // 从右到左找到第一个大于切分元素的元素index后停止
//            while (value < a[j] && j >= 0) {
//                j--;
//                if (j == lo) {
//                    break;
//                }
//            }
            if (i >= j) {
                break;
            }
            exch(a, i, j);
        }
        // 将处于lo处的切分元素换到正确的位置j处
        exch(a, lo, j);
        // 返回切分元素的正确位置
        return j;
    }

    private static void exch(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

    public static void main(String[] args) {
        int[] a = new int[]{5, 3, 7, 3, 4, 8, 9, 43, 32, 56, 0};
        quickSort(a);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733119.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号