【常用排序算法】快速排序

##快速排序

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法

  • 先从数列中取出一个数作为基准数pivot。
  • 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
  • 再对左右区间重复第二步,直到各区间只有一个数。

在这里插入图片描述

package com.xiaoyg.algorithm.sort;
import java.util.Arrays;
public class QuickSort {public static void main(String[] args) {int[] values = {17,14,13,29,25,8,4};System.out.println("values数组原始顺序:"+ Arrays.toString(values));quickSort(values, 0, values.length - 1);System.out.println("values数组排序后顺序:"+ Arrays.toString(values));}private static void quickSort(int[] values, int left,int right) {//如果左值>=右值,不需要进行排序。if (left >= right) return;//取出基准值int pivot = values[left];//定义左值和右值int le = left;int ri = right;//左值下标小于右值下标示时,开始循环比较while (le < ri){//右值大于等于中值,不需要交换值,只需要将右标左移while (le < ri && values[ri] >= pivot){ri --;}//右值小于中值时,将右标值赋给左标值,即将小于中值的放到左边。if (le < ri){values[le] = values[ri];}//左值小于等于中指,说明不需要交换值,将左标右移while (le < ri && values[le] <= pivot){le ++;}//左值大于中值,需要将左值赋给右标值。if (le < ri){values[ri] = values[le];}//本轮比较结束,将中值放在当前游标的位置,这样,左边都是小于中值的,右边都是大于中值的。if (le <= ri){values[le] = pivot;}}//递归中值左边的操作,重复上方的逻辑quickSort(values, left, ri - 1);//递归中值右边的操作,重复上面的逻辑。quickSort(values, ri + 1, right);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/322128.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7静态网络配置

在vmware中打开&#xff0c; 点击虚拟网络编辑器&#xff0c;修改以下配置 网关IP最后一位固定为2&#xff0c;这个160根据下图中vmnet8的ip地址来的 打开网络控制面板>打开vmnet8查看 接着打开linux&#xff0c;有桌面版的使用桌面版更加方便 箭头这么乱&#xff0c;但是你…

python统计分析——直方图(df.hist)

使用dataframe.hist()或series.hist()函数绘制直方图 import numpy as np import pandas as pd from matplotlib import pyplot as plt.dfpd.DataFrame(data{type:[A,A,A,A,A,A,A,A,A,A,B,B,B,B,B,B,B,B,B,B],value:[2,3,3,4,4,4,4,5,5,6,5,6,6,7,7,7,7,8,8,9] }) serpd.Serie…

BUUCTF--hitcontraining_heapcreator1

老规矩上来看保护&#xff1a; 64位架构并且除了PIE全开。接着黑盒测试下场景&#xff1a; 菜单题不用想就是堆。接着我们我们看看IDA中的逻辑&#xff1a; 程序的主要逻辑是增删改查。我们看看创建堆的过程&#xff1a; 注释我已给出&#xff0c;步骤大概如下&#xff1a; 1.…

【DevOps-06】Jenkins实现CI/CD操作

一、简要说明 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 二、准备Springboot工程 1、IDEA新建工程 2、填写项目工程信息 3、选择Springboot版本…

123基于matlab的差分优化算法优化极限学习机,DE-ELM

基于matlab的差分优化算法优化极限学习机&#xff0c;DE-ELM。输出分类识别结果和准确率。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 123差分优化算法极限学习机 (xiaohongshu.com)

基于综合特征的细菌噬菌体宿主预测工具iPHoP (Integrated Phage HOst Prediction)的介绍以及使用方法详细流程

介绍 iPHoP&#xff08;Integrated Phage HOst Prediction&#xff09;是一种基于综合特征的细菌噬菌体宿主预测方法。它是通过整合基因组序列、蛋白质序列和宿主基因组信息来预测细菌噬菌体的宿主范围。 iPHoP的预测过程分为三个步骤&#xff1a;特征提取、特征选择和宿主预…

Vue3集成scss实现清除浏览器默认样式

1.首先去npm官网找到对应的reset.scss文件&#xff0c;复制内容在本地src下style建一个一模一样的文件&#xff0c;内容复制进去npm | Home 2.在style文件夹下再建一个index.scss文件&#xff0c;在它里边引入刚刚建好的reset.scss文件&#xff0c;如下 import ./reset.scss; …

MySQL之CRUD、常见函数及union查询

文章目录 1.思维导图 1.思维导图

Python打印Python环境、PyTorch和CUDA版本、GPU数量名称等信息

代码&#xff1a; import torch import platformgpu_num torch.cuda.device_count() torch_version torch.__version__ python_version platform.python_version()print("Python Version: Python %s" % python_version) print("PyTorch Version: %s" %…

软件测试之自动化测试的四个阶段

第一阶段&#xff1a;API自动化 之前的想法是&#xff1a;通过API创建数据&#xff0c;访问数据&#xff0c;进行数据操作&#xff0c;存储数据库&#xff0c;通过模拟前端的操作来想象API的访问流程。 然后&#xff0c;验证数据库是否存储正确。后来发现该想法流程就是错误的…

可狱可囚的爬虫系列课程 09:通过 API 接口抓取数据

前面已经讲解过 Requests 结合 BeautifulSoup4 库抓取数据&#xff0c;这种方式在抓取数据时还是比较方便快捷的&#xff0c;但是这并不意味着所有的网站都适合这种方式&#xff0c;并且这也不是抓取数据的最快方式&#xff0c;今天我们来讲一种更快速的获取数据的方式&#xf…

Vue开发中使用Element UI过程中遇到的问题及解决方案Missing required prop: “value”

一、vue中使用el-table的typeindex有时不显示序号 Table 表格 用于展示多条结构类似的数据&#xff0c;可对数据进行排序、筛选、对比或其他自定义操作。 当el-table元素中注入data对象数组后&#xff0c;在el-table-column中用prop属性来对应对象中的键名即可填入数据&…