快速排序Java模板
详情参考 https://www.acwing.com/problem/content/787/
https://www.acwing.com/solution/content/2096/

快速排序的整体过程,动态变化流程

以从小到大排序为例

  • 选择一个目标参考值pivitpivitpivit,通常课本上会说选择数组的第一个元素,但是如果本身数组就已经是从小到大有序了的话,这个时候效率是最差的,会退化到O(n2)O(n^{2} )O(n2)。因此我们这里选择中间位置的元素作为参考值

通常的、没有经过充分考虑的选择是将第一个元素做为"基准“。如果输入书随机的,那么这是可以接受的,但是如果输入是预排序的或是反序的,那么这样的”基准“就是一个劣质的分割,因为所以的元素不是被划入S1就是被划入S2。实际上,如果第一个元素用作”基准“而且输入是预先排序的,那么快速排序花费的时间将是二次的,可是实际上却没干什么事,因此,使用第一个元素作为”基准“是绝对糟糕的。

  • 从前往后找到一个不比目标元素值小的元素nums[i]nums[i]nums[i]
  • 从后往前找到一个不必目标元素值大的元素nums[j]nums[j]nums[j]
  • 如果i<ji < ji<j,那么直接进行交换nums[i]nums[i]nums[i]和nums[j]nums[j]nums[j]的值
  • 递归处理从lll到jjj,以及从j+1j + 1j+1到rrr的
import java.util.*;
import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));int n = Integer.parseInt(reader.readLine());int[] arr = new int[n];String[] s = reader.readLine().split(" ");for (int i = 0; i < n; i++) {arr[i] = Integer.parseInt(s[i]);}quickSort(arr, 0, n - 1);for (int i = 0; i < n; i++) {writer.write(arr[i] + " ");}writer.write("\n");writer.flush();writer.close();reader.close();}public static void quickSort(int[] q, int l, int r) {if (l >= r)  {return;}// 取数组的中间位置的元素作为参考对象。// 假设原数组本身就是有序的,那么以数组中间位置元素记录的话,最坏情况下时间复杂度也只有O(n*n/2)int pivit = q[l + r >> 1];int i = l - 1;int j = r + 1;while (i < j) {do {i++;} while (pivit > q[i]);do {j--;} while (pivit < q[j]);if (i < j) {int tmp = q[i];q[i] = q[j];q[j] = tmp;}}quickSort(q, l, j);quickSort(q, j + 1, r);}
}

快速排序 Java模板相关推荐

  1. java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板

    点击"牧码小子"关注,和众多大牛一起成长! 关注后,后台回复 java ,领取松哥为你精心准备的技术干货! 虽然现在慢慢在流行前后端分离开发,但是据松哥所了解到的,还是有一些公司在 ...

  2. java 模板引擎_SpringBoot入门系列(四)如何整合Thymeleaf模板引擎

    前面介绍了Spring Boot的优点,然后介绍了如何快速创建Spring Boot 项目.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/ ...

  3. java 模板引擎_Spring Boot 如何快熟整合Thymeleaf模板引擎

    前面介绍了Spring Boot的优点,然后介绍了如何快速创建Spring Boot 项目.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/ ...

  4. java 模板模式_Java模板模式(Template模式)

    Java模板模式(Template模式) 下一节> Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使 ...

  5. Thymeleaf学习总结(1)——新一代Java模板引擎Thymeleaf

    Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...

  6. Beetl学习总结(1)——新一代java模板引擎典范 Beetl入门

    1. 什么是Beetl Beetl目前版本是2.7.0,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点.使得开发和维护模板有很好的体验.是新一代的模板引擎. ...

  7. Java模板引擎 FreeMarker介绍1

    Java模板引擎 FreeMarker介绍 摘要: FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,FreeMarker被设计用来生成HTML Web页面( ...

  8. java 模板 word转pdf 可分页 带图片

    java 模板 word转pdf 可分页 带图片 之前写过一个简单的案例,但是在项目中完全不能满足客户的需求,所以重新用啦一种方式来写,采用了word转换pdf的方式,这种经过不断研究,满足了可分页, ...

  9. 谷歌java模板_如何创建Google表格模板

    谷歌java模板 If you find yourself creating the same spreadsheet outline over and over again in Google Sh ...

最新文章

  1. 基于Spring可扩展Schema提供自定义配置支持
  2. 在我生命里留下温暖记忆的一位老师
  3. namenode和datanode工作机制_Hadoop的namenode的管理机制,工作机制和datanode的工作原理...
  4. Linux之MySQL源码编译安装
  5. Eclipse离线安装Java Decompiler插件
  6. 根据我4年Facebook营销经验,和大家聊聊做不好Facebook广告的原因!
  7. 计算机基础应用000018,计算机应用基础第01章计算机基础知识
  8. PDCA是什么意思?
  9. 学校计算机教室用多大线径电缆,施工要用多大的电线电缆?本文教你怎么算
  10. 计算机领域顶级会议列表
  11. 使用JAXB实现JAVA对象和XML字符串的互相转换
  12. TPshop商城——windows部署(保姆级)
  13. 机器学习——需求预测——准确性(误差)统计——MAE、MSE、MAPE、WMAPE
  14. 9 年小厂老前端的年终总结(90 后,12 年毕业,工作 9 年,发过传单,做过运营)
  15. 产品经理的职业生涯规划是怎么样的?
  16. 进程和线程的主要区别及进程与程序的主要区别
  17. 如何通过数据分析选品(以新零售为例)
  18. Codevs 1219 骑士游历
  19. 中国火星车叫什么名字?
  20. 网络软件测试的IP地址,如何快速查出网内空闲IP地址

热门文章

  1. 互联网热门职位薪资数据采集爬虫对比报告
  2. URL 的编码和解码
  3. 一键复制多个文件夹内的文件到同一文件夹中
  4. 安利丨文案大神都在偷偷看的网站
  5. SCJ-LL01 多普勒超声波流量计(多普勒超声波明渠流量计)
  6. 神经网络与卷积神经网络_神经网络与人的思想
  7. capwap学习笔记——初识capwap(二)
  8. rtklib 后处理_RTKLIB数据处理及实验步骤
  9. Go(03) slice切片的使用
  10. Browserify