• 个人拙见理解使用Java进行快速排序


    看其他人写博客的快速排序,总是交换来交换去的,不能很容易理解,个人从另一个角度理解快速排序。

    快速排序事实上就选一数为中间轴,比它小的在前面,大的在后面,比如一组数据48、37、64、96、75、12、26

    就是将37,12,26放在48前面,64,96,75放在后面,即第一个交换结果为37、12、26、48、64、96、75

    当然数据序列可能有些偏差,下面说一下思路

        public static int partition(int array[], int low, int high) {
            //当前位置为第一个元素所在位置
            int p_pos = low;
            //采用第一个元素为轴
            int pivot = array[p_pos];
            for (int i = low + 1; i <= high; i++) {
                if (array[i] < pivot) {            
                    p_pos++;
                    swap(array, p_pos, i);
                    System.out.println(Arrays.toString(array));
                }
            }
            swap(array, low, p_pos);
            System.out.println(Arrays.toString(array));
            return p_pos;
        }

    相当于{48,37,64,96,75,12,26}为当前数组,重新创建一个新数组{48,空,空……},中间轴数pos就是固定的48

    先拿37和48进行比较,小于且等于(<=),37放在第二个空即为{48,37,空……},事实上代码是将37和第二个位置数进行交换,也就是37和37交换

    遍历之后12小于且等于(<=)48,置换第三个空,也就是12和46交换

    同理26和96交换,最后变为48, 37, 12, 26, 75, 64, 96,

    遍历完后,再将第一个数和中间轴数pos交换,变为26, 37, 12, 48, 75, 64, 96

    为什么不先把48和pos=48比较,因为比较后48会一直改变

    只要将后面6个数划分两个块,48和较小的块最后一个数交换即可

    当然只用到了一个判定只是为了方便理解,在算法设计上并不是从前往后遍历的,

    public static int partition(int array[], int low, int high) {
            //当前位置为第一个元素所在位置
            int p_pos = low;
            //采用第一个元素为轴
            int pivot = array[p_pos];
            int i=low,j=high;
            while(i < j){
                while(array[j] > pivot)
                    j--;
                swap(array, i, j);
                while(array[i] < pivot)
                    i++;
                swap(array, i, j);
            }
            System.out.println(Arrays.toString(array));
            return i;
        }

    而是先左边再右边,右边再左边

  • 相关阅读:
    非线性滤波:中值滤波;双边滤波
    线性滤波:方框滤波、均值滤波、高斯滤波
    输入输出XML和YAML文件
    图像对比度、亮度值调整
    opencv图像混合,分离颜色通道、多通道图像混合
    访问图像的三种方法
    Opencv
    INSERT增加数据记录
    MySQL 语言大全
    text
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/9037462.html
Copyright © 2020-2023  润新知