首页 > 其他分享 >快速排序

快速排序

时间:2024-10-23 11:12:19浏览次数:5  
标签:arr int 基准 元素 排序 快速 left

一、快速排序的介绍
快速排序简单来说就是指先选择一个基准元素(默认第一个是基准元素),再去找到比基准元素大的元素,放在基准元素的右边,比基准元素小的放在基准元素的左边,再将找到的最后一个比基准元素小的元素与基准元素进行交换

动画演示的网址
https://visualgo.net/en/sorting

二、代码进行演示

/*
        快速排序指的是先选择一个基准元素,再去找到比基准元素大的元素,放在基准元素的右边,比基准元素小的放在基准元素的左边

       先定义左右边界,找到所有比基准大的值和比基准小的值,进行交换,大的值从左边往右边去找,小的值从右边往左边去找。
 */

public class KuaiSuTest2 {
    public static void main(String[] args) {
        int arr[] = new int[]{7, 3, 9, 4, 8};

        System.out.print("初始数组: ");
        printArray(arr);

        // 非递归快速排序
        int left = 0;
        int right = arr.length - 1;

        // 使用循环处理所有区间
        while (left < right) {
            int pivot = arr[left]; // 选择基准元素
            int a = left + 1; // a 指向基准右边的元素
            int b = right; // b 指向数组右端

            // 开始划分
            while (a <= b) {
                // 找到比基准大的值
                while (a <= right && arr[a] <= pivot) {
                    a++;
                }
                // 找到比基准小的值
                while (b >= left && arr[b] > pivot) {
                    b--;
                }
                // 当 a 和 b 不相遇时交换
                if (a < b) {
                    // 交换 arr[a] 和 arr[b]
                    int temp = arr[a];
                    arr[a] = arr[b];
                    arr[b] = temp;
                }
            }

            // 交换基准元素与 b 指向的元素
            arr[left] = arr[b];
            arr[b] = pivot;

            // 输出当前状态
            System.out.print("当前数组状态: ");
            printArray(arr);

            // 更新指针,确保两个子数组都被处理
            // 处理右边部分
            if (b + 1 < right) {
                left = b + 1; // 处理右边部分
            } else {
                // 处理左边部分
                right = b - 1; // 更新右边界处理左边部分
                left = 0; // 重置左边界以继续处理
            }
        }

        // 输出最终的排序结果
        System.out.print("快速排序后的数组: ");
        printArray(arr);
    }

    // 打印数组的辅助方法
    public static void printArray(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
}

标签:arr,int,基准,元素,排序,快速,left
From: https://www.cnblogs.com/ndmtzwdx/p/18495967

相关文章

  • 选择排序
    一、选择排序的介绍简单来说就是,先从数组中找到最小的那个数(先默认第一个数为最小的),对他进行标记(使用一个变量存储它的下标,遇到比他小的更新下标),直到找到数组中的最后一个数,然后将最小的那个数与第一个数进行交换。接下来我们使用动画演示进行解释下面的是网址跟截屏以及如何......
  • 排序(一)插入排序,希尔排序,选择排序,堆排序,冒泡排序
    目录一.排序1.插入排序2.希尔排序3.选择排序4.堆排序5.冒泡排序二.整体代码1.Sort.h2.Sort.c3.test.c一.排序1.插入排序插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序......
  • 冒泡排序
    一、冒泡排序的介绍冒泡排序简单的来说就是将第一个数与第二个数进行比较,如果第一个数大就进行交换,这样比到最后就是这组数中最大数,下面将使用动画演示来展示冒泡排序https://visualgo.net/en/sorting这是一个可视化界面,可以详细的查看相关的排序动画。二、代码进行演示接下......
  • python中的字典排序--sorted()
    字典的排序:在学习python的时候,了解到相比于列表,字典是一个无序的数据结构,一般都不对其进行排序的。但是要想对字典进行排序,是可以通过sorted()函数进行操作的!关于字典的排序,下面从键key和值value进行代码的运行和分析:【先看代码和执行结果,后面会进行详细的解析】#先定义一......
  • Docker快速使用
    Docker快速使用镜像操作检索:dockersearch搜索nginx:$dockersearchnginxNAMEDESCRIPTIONSTARSOFFICIALnginxOfficialbuildofNginx.......
  • 腾讯云对接来此加密:实现域名自动验证 快速申请证书
    利用腾讯云DNS解析接口,实现自动配置域名解析,达到自动验证的目的。 以下是具体获取API密钥,添加到来此加密网站的步骤:1、登录腾讯云后台。2、在左上角点击头像小图标,在展开的面板上,点击[访问管理]3、在新打开的页面中找到[用户列表]菜单,点击。4、在[用户列表]界面上点击[新......
  • 排序算法 —— 快速排序(理论+代码)
    目录1.快速排序的思想2.快速排序的实现hoare版挖坑法前后指针法快排代码汇总3.快速排序的优化三数取中小区间优化三路划分4.快速排序的非递归版本5.快速排序总结1.快速排序的思想快速排序是一种类似于二叉树结构的排序方法。其基本思想为从待排序序列中任取一个......
  • HQQ: 快速高效的大型机器学习模型量化方法
    HQQ:革命性的模型量化技术在人工智能和机器学习领域,模型量化一直是一个重要的研究方向。随着模型规模的不断扩大,如何在有限的计算资源下高效部署大型模型成为了一个亟待解决的问题。近日,由MobiusLabs开发的Half-QuadraticQuantization(HQQ)技术为这一难题提供了一个创新的......
  • 使用 Cursor 和 Devbox 快速开发基于 Rust 的 WASM 智能合约
    本教程以一个智能合约(使用NEAR的一个官方FungibleTokens来实现)的例子来介绍一下Devbox的强大功能,轻松构建环境,轻松发布。NEAR是一个去中心化的应用平台,使用了分片技术的区块链。免责申明:本教程仅适合用来学习智能合约。FungibleTokens我就不解释了,有兴趣的自己去搜......
  • echarts根据数据动态生成饼图的个数,并排序
    动态生成个数functioninitPurchaseContract(){//获取数据的keysletkeys=Object.keys(dataPurchaseContract[0]);lettotalCharts=keys.length-1;//饼图数量//动态计算行数和列数(使布局接近正方形)letcols=3;//列数letrows......