《Java算法》排序算法-快速排序
排序算法-快速排序:
/**
* 给定一个数组:按照从小到大排序。
* 思路:
* 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边。
* 2. data左边和右边的数组,使用第一点的方法类推。
*
* 第一点的具体实现:
* 获取第一个数放入临时变量data,从右边开始遍历,获取第一个比data小的数,将这个数放入data原本的位置(位置角标为0,满足小于data的数放入
* data左边的逻辑),然后从左开始遍历获取第一个大于data的数,放入刚刚空出来的位置(这个位置是右边是一定大于data的,所以将此数放入该位置
* 满足大于data的数放右边的逻辑,再右边,再左边,直到左右重合停止,并最后将data放入最后的重合的空位中。)。
*/
public class QuickSort {
public static void main(String args[]){
int[] num={4,5,2,9,6,4,0,2,4,7};
new QuickSort().QuickSort(num,0,num.length-1);
for(int n:num) {
System.out.print(n+" ");
}
} public int PartSort(int arr[], int low, int high) {
int data = arr[low];
/**一次遍历的方法:插空法 定义一个data将arr[low]存起来,并把这个位置挖空*/
while (low < high) {
while (low < high && arr[high] >= data) {
high--;
}
arr[low] = arr[high];
/**从high,也就是后面往前遍历 找到比键值小的数据 插入到前面留下的空中 high位再次留下空来*/
while (low < high && arr[low] <= data) {
low++;
}
arr[high] = arr[low];
}
arr[low] = data;
/**循环退出后 low和high重合 将将键值赋给第low,并将low返回*/
return low;
} public void QuickSort(int arr[], int low, int high) {
if(low<high) {
//防止发生栈溢出异常
int index = PartSort(arr, low, high);
QuickSort(arr, low, index - 1);
QuickSort(arr, index + 1, high);
}
}
}
运行结果:
《Java算法》排序算法-快速排序的更多相关文章
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- Java八大排序算法
Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
- Java各种排序算法
Java各种排序算法详解 排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有 ...
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
- Java常见排序算法之快速排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- 我的Java开发学习之旅------>Java经典排序算法之快速排序
一.算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod).(1) 分治法的 ...
- Java各种排序算法详解
排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有可以分为以下几类: (1).插 ...
随机推荐
- LinearLayout适配不同机型技巧
<View android:layout_width="match_parent" android:layout_height="0dp" android ...
- Python3 之 with语句(高效、便捷)
在实际的编码过程中,有时有一些任务,需要事先做一些设置,事后做一些清理,这时就需要python3 with出场了,with能够对这样的需求进行一个比较优雅的处理,最常用的例子就是对访问文件的处理. 文 ...
- python的匿名函数
在Python,有两种函数,一种是def定义,一种是lambda函数. lambda函数是Python一种生成函数对象的表达式形式.匿名函数通常是创建了可以被调用的函数,它返回了函数,而并没有将这个函 ...
- sql server建库建表(数据库和数据表的常用操作)
数据库和数据表 (开发常用 操作) 一,数据库的创建 一个SQLServer 是由两个文件组成的:数据文件(mdf) 和日志文件(ldf),所以我们创建数据库就是要为其指定数据库名.数据文件和日志文件 ...
- 【决战西二旗】|理解Sort算法
前言 前面两篇文章介绍了快速排序的基础知识和优化方向,今天来看一下STL中的sort算法的底层实现和代码技巧. 众所周知STL是借助于模板化来支撑数据结构和算法的通用化,通用化对于C++使用者来说已经 ...
- Android Binder机制介绍
做过Android开发的同学可能有些体会,入门初期,工作内容主要是实现各式各样的UI界面,以及实现应用的业务逻辑.在这个阶段,我们会逐渐熟悉View系统,逐渐学会实现各种各样的界面以及动画效果.再往后 ...
- 如何在导航条的button点击变换时,切换对应的控制器
1.导航条内的button被点击 切换对应的控制器 让控制器作为调航条的代理 1.定义代理 2.遵循代理协议 3.实现代理 4.在合适的地方调用代理 当按钮被点击的时候切换控制器
- Git与GitHub 学习笔记
以下信息来源于网络资料,并进行整理与精简 Git是目前世界上最先进的分布式版本控制系统,和svn,vss等一样都是进行版本控制的. GitHub是一个软件项目的托管平台,相当于自己建立的 svn服务器 ...
- luogu P4677 山区建小学 |dp
题目描述 政府在某山区修建了一条道路,恰好穿越总共nnn个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为did_idi(为正整数),其中,0& ...
- 微服务管理平台nacos虚拟ip负载均衡集群模式搭建
一.Nacos简介 Nacos是用于微服务管理的平台,其核心功能是服务注册与发现.服务配置管理. Nacos作为服务注册发现组件,可以替换Spring Cloud应用中传统的服务注册于发现组件,如:E ...