码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序学习

时间:2019-11-09 12:00:01      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:import   art   png   quic   分而治之   oid   val   一次循环   image   

简单原理:

  快速排序是对冒泡排序的改进,用分而治之的思想,先找到一个基准数,利用基准数进行一轮排序,将所有比它小的数都放在左边,再将所有比它大的数都放在它右边,

然后返回基准数的位置,进行下一轮排序,下一轮将分别对基准数左右两边进行排序,依次循环,直到最后排序完成。

代码实现:

import org.codewy.util.PrintUtil;

/**
 * 快速排序
 */
public class QuickSort {

    public static void qiuckSort(int[] source, int i, int j) {
        int point;
        if (i < j) {
            point = partition(source, i, j);
            qiuckSort(source, i, point - 1);
            qiuckSort(source, point + 1, j);
        }
    }

    private static int partition(int[] source, int i, int j) {
        //将第一个值设为基准数
        int pointVal = source[i];
        while (i < j ) {
            //从右边开始找到第一个比基准值小的数val1
            while (i < j && source[j] >= pointVal) {
                j--;
            }
            //将找到的数与放到基准数的位置
            if (i < j) {
                source[i++] = source[j];
            }

            //从左边开始找到第一个比基准数大的数
            while (i < j && source[i] <= pointVal) {
                i++;
            }
            //将找到的数放到上一步找到的val1之前的位置
            if (i < j) {
                source[j--] = source[i];
            }
        }
        //将基准数放到数组中,它左边的数都比他小,右边的数都比他大
        source[i] = pointVal;
        //返回下一次循环的分界点
        PrintUtil.printIntArr(source);//打印每轮排序完后的状态
        return i;
    }

    public static void main(String[] args) {
        int[] source = new int[]{5, 4, 8, 1, 2, 6, 9, 7, 3};
        qiuckSort(source, 0, source.length-1);
        PrintUtil.printIntArr(source);
    }

}

输出结果:

技术图片

 

 

 

 

 

快速排序学习

标签:import   art   png   quic   分而治之   oid   val   一次循环   image   

原文地址:https://www.cnblogs.com/codewy/p/11824588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!