快速排序
  快速排序是对冒泡排序的一种改进。
  它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。

  快速排序算法中,每一次递归时以第一个数为基准数,找到数组中所有比基准数小的.再找到所有比基准数大的.小的全部放左边,大的全部放右边,确定基准数的正确位置
核心思想:分治思想
时间复杂度:O(n)
实现步骤
1,从右开始找比基准数小的
2,从左开始找比基准数大的
3,交换两个值的位置
4,红色继续往左找,蓝色继续往右找,直到两个箭头指向同一个索引为止
5,基准数归位
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
//1、创建数组
int arr[] = {6, 1, 3, 5, 8, 9, 10, 2, 4, 7, 1};
//2、调用快排方法
quickSort(arr, 0, arr.length - 1);
//3、打印数组
System.out.println(Arrays.toString(arr));
}
//快速排序
private static void quickSort(int[] arr, int left, int right) {
//递归结束条件
if (right < left) {
return;
}
//定义两个遍历存放初始的left和right方便后面归为
int left1 = left;
int right1 = right;
//确定出基准数
int baseNumber = arr[left1];
//定义一个交换变量
int temp;
//排序
while (left != right) {
//2.1、从右边开始找比基准数小的
while (arr[right] >= baseNumber && right > left) {
right--;
}
//2.2、从左边开始找比基准数大的
while (arr[left] <= baseNumber && right > left) {
left++;
}
//2.3、交换两个值得位置
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
//基准数归为
temp = arr[left];
arr[left] = arr[left1];
arr[left1] = temp;
//递归调用,将左半部分排好序
quickSort(arr, left1, left - 1);
//递归调用,将由半部分排好序
quickSort(arr, left1 + 1, right1);
}
}

快速排序(QuickSort)Java版的更多相关文章

  1. 排序算法系列:快速排序算法JAVA版(靠谱、清晰、真实、可用、不罗嗦版)

    在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 为了不误人子弟耽误时间,推荐看一些靠谱的资源,如[啊哈!算法]系列: https: ...

  2. 随手编程---快速排序(QuickSort)-Java实现

    背景 快速排序,是在上世纪60年代,由美国人东尼·霍尔提出的一种排序方法.这种排序方式,在当时已经是非常快的一种排序了.因此在命名上,才将之称为"快速排序".这个算法是二十世纪的七 ...

  3. 快速排序算法Java版

    网上关于快速排序的算法原理和算法实现都比较多,不过java是实现并不多,而且部分实现很难理解,和思路有点不搭调.所以整理了这篇文章.如果有不妥之处还请建议.首先先复习一些基础.    1.算法概念. ...

  4. quicksort(java版)

    相信大家都知道几种排序算法,比如说冒泡排序,选择排序,插入排序等等,这些个算法都不是很难,自己多多理解理解就能掌握了,而今天我们要谈的就是重头戏就是快速排序. 引用大牛的思想来对排序算法解释一下.(文 ...

  5. 快速排序(java版)

    public class QuickSortTest{ //比较与交换 private static int partition(int[] source, int low, int hight) { ...

  6. 快速排序QuickSort

    前几天实现了直接插入排序.冒泡排序和直接选择排序这三个基础排序.今天看了一下冒泡排序的改进算法,快速排序.单独记录一下,后面还有归并和基数排序等 快速排序 1.选择一个支点默认为数组第一个元素及arr ...

  7. 常见排序算法总结(java版)

    一.冒泡排序 1.原理:相邻元素两两比较,大的往后放.第一次完毕,最大值在最大索引处. 即使用相邻的两个元素一次比价,依次将最大的数放到最后. 2.代码: public static void bub ...

  8. 内部排序比较(Java版)

    内部排序比较(Java版) 2017-06-21 目录 1 三种基本排序算法1.1 插入排序1.2 交换排序(冒泡)1.3 选择排序(简单)2 比较3 补充3.1 快速排序3.2 什么是桶排序3.3 ...

  9. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...

  10. 常用排序算法--java版

    package com.whw.sortPractice; import java.util.Arrays; public class Sort { /** * 遍历一个数组 * @param sor ...

随机推荐

  1. Angular Routing

    Angular Routing v9.0.7 https://angular.io/start/start-routing

  2. TypeScript & global.d.ts

    TypeScript & global.d.ts https://www.typescriptlang.org/docs/handbook/declaration-files/template ...

  3. Event Bus & Event Emitter

    Event Bus & Event Emitter Event Bus https://code.luasoftware.com/tutorials/vuejs/parent-call-chi ...

  4. dart2native 使用Dart 在macOS,Windows或Linux上创建命令行工具

    下载dart2.6以上 >dart2native --help 编写源文件 // bin\main.dart main(List<String> args) { print('hel ...

  5. [转]自动驾驶平台Apollo 2.5环境搭建

    原文地址:https://blog.csdn.net/jinzhuojun/article/details/80210180,转载主要方便随时查阅,如有版权要求,请及时联系. 我们知道,自动驾驶在学界 ...

  6. 21_MySQL表外连接实战

    -- 查询每名员工的编号.姓名.部门.月薪.工资等级.工龄.上司编号.上司姓名.上司部门? SELECT e.empno,#员工编号 e.ename,#员工姓名 e.deptno,#员工部门 e.sa ...

  7. Redis Lua 脚本使用

    本文转载自Redis Lua 脚本使用 Lua 简介 Lua语言提供了如下几种数据类型:booleans(布尔).numbers(数值).strings(字符串).tables(表格). 下面是一些 ...

  8. .net实现filestream类复制文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  9. 分布式实时处理系统——C++高性能编程

    [前言]基于通信基础,介绍Hurricane实时处理系统的工程实现,主要使用C++语言. 一.IPC.socket.异步I/O epoll 二.C++11 1.linux内存管理中使用RALL原则,C ...

  10. mtk相机冷启动拆解

    1 概述 冷启动大致可以分成以下几块内容: S0 (system) 主要是 Activity 的创建耗时(从 Touch up,即 ptr:up 开始) ptr:up S1 App 从 Activit ...