• 排序算法快速排序


    思路:

    1.定义一个partition(这利用最简单的:数组的第一个数)

    先从右往左找,找到第一个比partition小的数,放在low这个位置(由于此时low这个地方的数已经保存在partition中了,所以不会丢失)

    然后从左往右找,找到第一个比partition大的数,将其放于high此时的位置(high已经被放入了先前low的位置)

    然后将partition放入相遇点 left&right

    直到left与right相遇,此时已经完成了一次划分,low-left&right-high,且左边都是比partition小的数,右边都是比它大的数,那么,后续只需递归调用sort即可:

    sort(low,left-1);

    sort(left+1,high);

    public class QuickSort {
    
        public void sort(int[] a, int low, int high){
            if(low>=high){
                return;
            }
            int partition = a[low];
            int left = low, right =  high;
            while(left < right){
                while(left<right && a[right] >= partition){
                    right--;
                }
                if(left<right){
                    a[left] = a[right];
                }
                while(left<right && a[left] <= partition){
                    left++;
                }
                if(left<right){
                    a[right] = a[left];
                }
            }
            a[left] = partition;
            sort(a,low,left-1);
            sort(a,left+1,high);
        }
        @Test
        public void test(){
            int[] a = {1,2,5,8,3,4,6,9,7};
            sort(a,0,a.length-1);
            System.out.println(Arrays.toString(a));
        }
    
    }
  • 相关阅读:
    String的equals和hashCode方法
    查看oracle中表的索引
    初识RESTful
    linux安装字体库(simSun为例)
    排序之快排(JS)
    面向对象的三个基本特征 和 五种设计原则
    排序之希尔排序(JS)
    关于正则表达式
    Oracle 表分区介绍与使用
    一个复杂关联的sql
  • 原文地址:https://www.cnblogs.com/wsZzz1997/p/14731521.html
Copyright © 2020-2023  润新知