zoukankan      html  css  js  c++  java
  • 快速排序学习

    简单原理:

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

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

    代码实现:

    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);
        }
    
    }

    输出结果:

  • 相关阅读:
    矩阵旋转
    clang-format 规范及 Visual Stido Code 自定义格式化代码风格
    Windows 安装 MinGW-w64
    Linux配置Visual Stdio Code
    Ubuntu中安装eclipse
    Ubuntu安装JDK11
    Ubuntu安装搜狗输入法
    C/C++算术运算(类型使用)的注意事项
    闰年判断与日期计算
    查看变量类型
  • 原文地址:https://www.cnblogs.com/codewy/p/11824588.html
Copyright © 2011-2022 走看看