博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数据结构与算法】快速排序
阅读量:6479 次
发布时间:2019-06-23

本文共 3451 字,大约阅读时间需要 11 分钟。

463931-20170508215735410-838361199.png

程序:

package com.nicchagil.generics.study.No099快速排序;public class QuickSort {        public static void sort(int[] array, int left, int right) {        if (left > right) {            System.out.println("结束递归:[" + left + "], [" + right + "]");            return;        }        print(array, left, right);        int standardIndex = left;        int standard = array[standardIndex]; // 起始下标值为标准值        System.out.println("选取标准值下标:" + standardIndex + ",值为:" + standard);        int i = left;        int j = right;        while (i < j) {            /* j从右向左遍历,直到找到比标准值小的值,或者遇到i,就停止 */            while (array[j] >= standard && i < j) {                j--;            }            /* i从左向右遍历,直到找到比标准值大的值,或者遇到j,就停止 */            while (array[i] <= standard && i < j) {                i++;            }                        /*             * 在此断点,有如下情况:             * 1、j坐标从右向左找,找到了小于标准值的数;i坐标从左向右找,找到了大于标准值的数             * 2、j坐标从右向左找,找到了小于标准值的数;i坐标从左向右找,但没找到大于标准值的数,遍历直到与j坐标相等             * 3、j坐标从右向左找,未能找到小于标准值的数,遍历直到与i坐标相等             */            System.out.println("一轮遍历后的下标:[" + i + "]、[" + j + "],他们的值为:" + array[i] + "、" + array[j]);            /* i找到了比标准值大的下标、j找到了比标准值小的下标,但它们还没有相遇,就交换它们的值 */            if (i < j) {                swap(array, i, j);            }            print(array, left, right);        }        if (standardIndex != i) {            System.out.println("将标准值下标放到i下标,标准值下标和i下标分别为:[" + standardIndex + "], [" + i + "],它们的值为:" + array[standardIndex] + ", " + array[i]);            swap(array, standardIndex, i);        }        print(array, left, right);                if (left < i - 1) {            System.out.println("递归调用:[" + left + "], [" + (i - 1) + "]");            sort(array, left, i - 1);        }        if (i + 1 < right) {            System.out.println("递归调用:[" + (i + 1) + "], [" + right + "]");            sort(array, i + 1, right);        }    }        /**     * 交换数组指定俩下标的值     * @param array 数组     * @param i 下标     * @param j 下标     */    private static void swap(int[] array, int i, int j) {        System.out.println("交换这两个下标的值:[" + i + "]、[" + j + "], 他们的值为: " + array[i] + "、" + array[j]);        int temp = array[i];        array[i] = array[j];        array[j] = temp;    }    public static void main(String[] args) {        int[] array = {565,841,496,225,321,586};        // int[] array = {2,4,6,8,10};        print(array, 0, array.length - 1);        sort(array, 0, array.length - 1);        print(array, 0, array.length - 1);    }    /**     * 打印执行下标范围的数组的值     * @param array 数组     * @param i 下标     * @param j 下标     */    public static void print(int[] array, int left, int right) {        for (int i = left; i <= right; i++) {            System.out.print(array[i] + " ");        }        System.out.println();    }}

日志:

565 841 496 225 321 586 565 841 496 225 321 586 选取标准值下标:0,值为:565一轮遍历后的下标:[1]、[4],他们的值为:841、321交换这两个下标的值:[1]、[4], 他们的值为: 841、321565 321 496 225 841 586 一轮遍历后的下标:[3]、[3],他们的值为:225、225565 321 496 225 841 586 将标准值下标放到i下标,标准值下标和i下标分别为:[0], [3],它们的值为:565, 225交换这两个下标的值:[0]、[3], 他们的值为: 565、225225 321 496 565 841 586 递归调用:[0], [2]225 321 496 选取标准值下标:0,值为:225一轮遍历后的下标:[0]、[0],他们的值为:225、225225 321 496 225 321 496 递归调用:[1], [2]321 496 选取标准值下标:1,值为:321一轮遍历后的下标:[1]、[1],他们的值为:321、321321 496 321 496 递归调用:[4], [5]841 586 选取标准值下标:4,值为:841一轮遍历后的下标:[5]、[5],他们的值为:586、586841 586 将标准值下标放到i下标,标准值下标和i下标分别为:[4], [5],它们的值为:841, 586交换这两个下标的值:[4]、[5], 他们的值为: 841、586586 841 225 321 496 565 586 841

转载地址:http://xxgko.baihongyu.com/

你可能感兴趣的文章
git学习之时光穿梭机
查看>>
set集合
查看>>
SVN服务器的搭建和使用
查看>>
mvc中枚举的使用和绑定枚举值到DropDownListFor
查看>>
多目标跟踪的评价指标
查看>>
python 生成器
查看>>
HTTPS(SSL)详解以及PHP调用方法
查看>>
突发小事件,USB接口问题
查看>>
适合wordpress中文网站的seo优化插件 DX-Seo
查看>>
Nginx负载均衡配置实例详解
查看>>
L1-009. N个数求和
查看>>
实参传递不当导致的运行时错误
查看>>
PHP生成静态html文件 的三种方法
查看>>
sqlserver 批量删除存储过程(转)
查看>>
微信小程序 setData 的坑(转)
查看>>
javascript 阻塞
查看>>
PHP 使用共享内存的资料
查看>>
getLayoutInflater().inflate .
查看>>
CSS3制作心形头像
查看>>
app开发-1
查看>>