java里面快速排序_Java:快速排序
快速排序相当于冒泡排序的进化版本,优点是速度比冒泡排序更快,缺点是写起来逻辑比冒泡排序啰嗦一点,没那么直观。
快速排序之所以比较快,是因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候 设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全 部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样只能在相邻的数之间进 行交换,交换的距离就大得多了。因此总的比较和交换次数就少了,速度自然就提高了。当 然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和 冒泡排序是一样的,都是 O(N2),它的平均时间复杂度为 O (NlogN)
下图是对:6 1 2 7 9 3 4 5 10 8进行快速排序的描述图
题目:
输入一串没有顺序的数字,对这串数字进行升序排序,并输出
package _4_9_test;
import java.util.ArrayList;
import java.util.Scanner;
/*快速排序法
*
* */
public class EightyEight {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int num[] = new int[n];
for (int i = 0; i < n; i++) {
num[i] = scanner.nextInt();
}
quitSort(num, 0, n - 1);
for (int i : num) {
System.out.print(i + " ");
}
}
public static void quitSort(int num[], int getLeft, int getRight) {
int left, right, t;
// 左右起始的位置
left = getLeft;
right = getRight;
// 如果左右的位置发生了交错,说明当前序列的循环结束了
if (left > right) {
return;
}
// 用于存放基准位
int temp;
// 选择序列的第一个数作为基准位
temp = num[left];
// 当左右位置还没碰面时
while (left < right) {
// 从序列的右边往左走,如果数字大于基准位,则继续走,直到碰到小于基准位的数字
while (left < right && temp <= num[right]) {
right--;
}
// 从序列的左边往右走,如果数字小于基准位,则继续走,直到碰到大于基准位的数字
while (left < right && temp >= num[left]) {
left++;
}
// 将左边大于基准位的数和右边小于基准位的数进行位置互换
t = num[right];
num[right] = num[left];
num[left] = t;
}
if (left >= right) {
// 序列中数字位置对调结束后,将基准位归位
num[getLeft] = num[left];
num[left] = temp;
}
// 递归
// 对基准位左边的序列重复执行上面的步骤
quitSort(num, getLeft, left - 1);
// 对基准位右边的序列重复执行上面的步骤
quitSort(num, left + 1, getRight);
}
}
java里面快速排序_Java:快速排序相关推荐
- java list 快速排序_java 快速排序
快速排序 采用了数组排序和 list集合排序 两种方式,其中 以num 来排序处理. import java.util.ArrayList; import java.util.List; public ...
- 算法——java快排(快速排序)
手写java快排(快速排序)代码--双边循环法,本人亲测哈哈!! package com.abc.backend.algo;import java.util.Arrays;/*** 快排(双边循环法) ...
- 用java的io做一个代码计数器,如何制作Java页面计数器_java
大庆采油六厂采油工艺研究所 王兵 王波 常常逛WWW的人,一定对许多起始页上的计数器感兴趣.每当你光临某个站点的起始页时,它的计数器就很亲切地告诉你,从某年某月某日开始,你是第几位光临的人.你可能也想 ...
- 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目
课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...
- 快速排序: 使用快速排序算法对数组进行排序
快速排序: 使用快速排序算法对数组进行排序 题目 一个数组有 N 个元素,使用快速排序对其进行排序输出(本题还会人工阅卷,请使用快速排序算法进行排序) 输入描述: 输入为两行. 第一行一个整数n(1 ...
- 【源码+教程】Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发
今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~课程详细讲解了一个桌球游戏的编写思路和流程,即使你刚学Java没多久,也可以跟随该教程视频完成属于你自己的桌球游戏!同时,还可以加深和 ...
- 【源码+项目部署】Java课程设计项目_Java人力资源管理系统
对就业和毕业都有帮助的Java实战项目来咯--人力资源管理系统! 人力资源管理系统 |Java项目2小时上手编写_源码+数据库拿走不谢!Java实战项目_Java开发https://www.bilib ...
- java快速排序的时间复杂度_java 快速排序
思路 通过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使整个数据变成有序序 ...
- java jdk实现快速排序_Java实现快速排序过程分析
快速排序过程 没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序"!光听这个名字是不是就觉得很高端呢. 假设我们现在对"52 39 67 95 70 8 25 5 ...
最新文章
- 升级安装linux ssh 升级安装
- SlopOne推荐算法
- Mac下安装graphviz以及XGBoost可视化决策树
- 手机配置代理报错invalid host header
- 多模块顺序_广东省考行测时间如何分配?答题顺序的建议?
- 大白菜u启动盘安装linux,大白菜U盘启动pe装系统教程
- MATLAB与STK互联18:卫星对象操作(9)—地面站可见性计算并获取数据2(补充上篇博文,有些问题需要澄清)
- TensorFlow 核心流程剖析 -- 2 神经网络模型的构建、分割和优化
- java下载文件或文件夹
- 全民一起玩Python提高篇第十五课:函数式编程初步(下)
- MacBook Pro打开前置摄像头
- python计算单词长度_python – 返回字符串中的单词长度
- caffe中loss函数代码分析--caffe学习(16)
- BUCT数据结构——图
- 【点击链接,自动下载安装APP,小米公司的坑】在浏览器中, 我们以为回退就能解决误点击。其实是不管用的。
- Win10任务管理器不显示GPU的解决方法
- 自顶向下与自底向上的归并排序
- 将代码从OPENGL移植到OPENGL ES需要修改什么
- idea2018永久破解
- 【毕业设计】基于情感分析的网络舆情热点分析系统
热门文章
- Linux疑难杂症解决方案100篇(二十)-Linux正则表达式(实用)指南
- mysql查询操作及正则表达式小结
- 【LeetCode从零单排】No36	Valid Sudoku
- 中小型研发团队架构实践:电商如何做企业总体架构?
- JVM源码分析之javaagent原理完全解读--转
- jodd-servlet工具集锦
- eclipse 中修改 M2_REPO的值--转载
- Example of how to use both JDK 7 and JDK 8 in one build.--reference
- Lesson 4.张量的线性代数运算
- shujufenxi:一季度中国人每天存700亿元!“报复性存款”能带来消费吗?