快速排序

java基础 专栏收录该内容
8 篇文章 0 订阅

数组快速排序

1 基本思路:

快速排序,即选一个元素作为基准,再将数组中元素与其比较,比它大的放在它的右边,比他小的放在它的左边,这样达到将数组切割成两部分,一部分大于基准数,另一本分小于基准数.再以此思想分别对两部分递归下去,直到剩下部分只剩下一个元素时,就完成了排序.(此为升序,降序则将大于基准的放左边,小于的放右边即可).

2 过程分析:
  1. 首先我们选0号位元素为基准,并且定义两个索引,分别从数组最左边left,和数组最右端right.

在这里插入图片描述

  1. 首先我们从最右端开始与基准元素比较,比基准元素大就进行right–(索引向左移动),遇到比基准元素小的就停止左移.

在这里插入图片描述

  1. 这是我们再将left索引进行右移,并与基准元素比较,如果比基准元素小就进行left++(索引右移),遇到比基准元素大的就停止移动.

在这里插入图片描述

  1. 将此时right索引元素与left索引元素位置进行调换,这样就做到了将大于基准数的元素放到基准数右边,小于的放左边.

在这里插入图片描述

在这里插入图片描述

  1. 如此下去,直到两个索引相遇即停止,再将基准数与相遇索引上的元素进行调换,这样就完成第一次分割.

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 代码实现:
public class Test {
    public static void main(String[] args) {
        int [] arr = {9,4,1,3,7,2,8,6,5,20};
        quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }
    public static void quickSort(int [] arr, int left, int right){
           
        int i =  left;
        int j =  right;
        int key = arr[left];

        while (i < j){
            //  循环判断与key比较,大于则继续向左移动,遇上小于停止循环并记下j的值
            while ( key <= arr[j] && i < j ) {
                j--;
            }
            //  循环判断与key比较,小于则继续向右移动,遇上大于停止循环并记下i的值
            while (key >= arr[i] && i < j ) {
                i++;
            }
            //  交换满足条件的元素
            if (i<j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
            //  将最后相遇的索引的值与基准值交换
        arr[left] = arr[i];
        arr[i] = key;
            //  左半边递归
        if( i> left+1){
            quickSort(arr,left,i-1);
        }
            //  右半边递归
        if ( j<right-1 ){
            quickSort(arr,i+1,right);
        }
    }

}

结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 20]
  • 4
    点赞
  • 2
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值