博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试-手撕快排-java实现
阅读量:4282 次
发布时间:2019-05-27

本文共 2262 字,大约阅读时间需要 7 分钟。

快要秋招了,可能会手撕快排,提前准备,记录一下。

/**
* 快排,是冒泡的一个改进;注意:快排【不稳定】,它有可能打破原来值为相同的元素之间的顺序。
* 采用分治法,通过一趟排序将数据分为两部分,比基准值小的元素放在基准值的前面,比基准值大的元素放在基准后面;
* 递归子序列
* 最好情况和平均时间复杂度都是O(nlogn) ;最坏时间复杂度为O(n^2),空间复杂度为O(1)
*/

方式1: partition版本

package scu.stone.spring;import java.util.Arrays;public class QuickSort {
/** * 快排,是冒泡的一个改进;注意:快排【不稳定】,它有可能打破原来值为相同的元素之间的顺序。 * 采用分治法,通过一趟排序将数据分为两部分,比基准值小的元素放在基准值的前面,比基准值大的元素放在基准后面; * 递归子序列 * 最好情况和平均时间复杂度都是O(nlogn) ;最坏时间复杂度为O(n^2),空间复杂度为O(1) */ public static void main(String[] args) {
int [] array = {
1,2,9,7,6,5,8,4,3}; int [] array2 = {
1,2,9,7,6,5,8,4,3}; quickSort(array, 0, array.length-1); System.out.println(Arrays.toString(array)); System.out.println("======================"); quickSort_partition(array2, 0, array.length-1); System.out.println(Arrays.toString(array2)); } public static void quickSort_partition(int [] array,int start, int end) {
if (start >= end) {
return; } int index = patition(array, start, end); quickSort_partition(array, start, index-1); quickSort_partition(array, index+1, end); } public static int patition(int[] array,int start,int end) {
int flag = array[start]; //哨兵 while (start < end) {
while(start < end && array[end] >= flag ) //从后往前 end--; swap(array,start, end); //遇到比哨兵小的,就交换 while (start < end && array[start] <= flag) //从前往后 start++; swap(array, start, end); //遇到比哨兵大的,就交换 } return start; } public static void swap(int[] array,int i,int j) {
int temp = array[i]; array[i] = array[j]; array[j] = temp; }}

方式二: 填坑版本

public static void quickSort(int[] array,int low,int high) {
if (array == null || array.length <= 0) {
return; } if (low >= high) {
return; } int left = low; int right = high; int key = array[left]; //挖坑1:保存基准值 while (left < right) {
while (left < right && array[right] >= key) {
right--; } array[left] = array[right]; //挖坑2:从后向前找到比基准值小的元素,插入到基准位置坑1中 while(left < right && array[left] <= key) {
left++; } array[right] = array[left]; //挖坑3:从前往后找到比基准大的元素,放到刚才挖的坑2中 }//end while array[left] = key; //基准值填补到坑3中,准备分治递归快排 System.out.println("Sorting: " + Arrays.toString(array)); quickSort(array, low, left-1); //递归 quickSort(array, left+1, high); }

转载地址:http://nvdgi.baihongyu.com/

你可能感兴趣的文章
九种跨域方式实现原理(完整版)
查看>>
深入理解applicationContext.xml和dispatcherServlet-servlet.xml区别
查看>>
Redis GEO 的java实现(通过Jedis)(GIS相关)
查看>>
Java读取Properties文件的六种方法
查看>>
聊聊性能:全链路压测 overview
查看>>
Java+Maven+selenium+testng+reportng自动化测试框架(简易搭建说明)
查看>>
WEB模糊查询注意的问题(排除%等通配符并支持不连续关键字查询)
查看>>
PostgreSQL中表的阶层数据取得方法
查看>>
敏捷开发下的B端交互设计流程
查看>>
如何用产品思维迭代项目管理流程?(创业有感)
查看>>
流程不紧扣价值,就是伪流程
查看>>
算法时间空间复杂度学习总结
查看>>
10分钟掌握数据类型、索引、查询的MySQL优化技巧
查看>>
Go 网络编程示例
查看>>
Web指纹识别技术研究与优化实现(CMS)
查看>>
JNI基础知识(java中的一套接口,用来跟c和c++通信)
查看>>
如何在线关闭一个tcp socket连接
查看>>
最全的微服务知识科普
查看>>
LVDS接口分类,时序,输出格式
查看>>
selinux在 android 上的实现
查看>>