快速排序-java
排序-快速排序
基本思想: 将数据划分为两部分,左边的所有元素都小于右边的所有元素;然后,对左右两边进行快速排序。
划分方法: 选定一个参考点(中间元素),所有元素与之相比较,小的放左边,大的放右边。
具体步骤: 选择第一个元素作为中间元素。
(1)先保存该元素的值到其它位置,腾出其空间。
(2)从后往前搜索一个比中间数小的元素,并将其放置到前面的这个空位上。
(3)从前往后搜索一个比中间数大的元素,并将其放置到后面的这个位置上。
重复(2),(3),直到两边搜索的空位重合,此时将中间元素放在该空位中。
平均时间:O(nlogn)
最好情况:O(nlogn)
最坏情况:O(n2)
辅助空间:O(logn)
稳定性:不稳定
适用场景:n比较大时
代码实现:
public static void quickSort(int[] list){
quickSort(list, 0, list.length-1);
}
private static void quickSort(int []list,int left,int right){
int cutPoint = 0;
if(left < right){
cutPoint = partion(list,left,right);
quickSort(list, left, cutPoint-1);
quickSort(list, cutPoint+1, right);
}
} private static int partion(int []list, int left, int right) {
int cutPointValue = list[left];
while(left != right){
while(left < right && cutPointValue < list[right])right--;
if(left < right){
list[left] = list[right];
left++;
} while(left < right && cutPointValue > list[left])left++;
if(left < right){
list[right] = list[left];
right--;
}
}
list[left] = cutPointValue;
return left;
}
快速排序-java的更多相关文章
- 快速排序 Java实现的快速排序
快速排序 Java实现的快速排序: package xc; import java.util.Arrays; import java.util.Random; /** * * @author dax ...
- 基本排序算法——快速排序java实现
简单的快速排序算法,我竟然花费了如此多的时间来写作,好好学习. /** * */ package basic.sort; import java.util.Arrays; import java.ut ...
- 排序算法----快速排序java
快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class tes ...
- 快速排序 java详解
1.快速排序简介: 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此 ...
- ADV-297 快速排序 java
问题描述 用递归来实现快速排序(quick sort)算法.快速排序算法的基本思路是:假设要对一个数组a进行排序,且a[0] = x.首先对数组中的元素进行调整,使x放在正确的位置上.同时,所有比x小 ...
- 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
- 排序算法之快速排序(java实现)
package com.javaTest300; public class Test039 { public static void main(String[] args) {// 快速排序 int ...
- 快速排序java
快速排序(Quicksort)是对冒泡排序的一种改进.它是先在数组中找到一个关键数,第一趟排序将比关键数小的放在它的左边,比关键数大的放在它的右边.当第一趟排序结束后,再依次递归将左边和右边的进行排序 ...
- 快速排序Java实现
package practice; import edu.princeton.cs.algs4.*; public class TestMain { public static void main(S ...
随机推荐
- Java数据类型转换
一.Date与String相互转换 1.Date转换成String SimpleDateFormat dd = new SimpleDateFormat("yyyy-MM-dd HH:mm& ...
- android studio serialversionuid设置
- C++基础-02
函数重载 - 函数重载依据参数列表,而不依据返回类型 - 重载函数匹配规则: 精确匹配,不需要类型转换,但可以数组名到指针.函数名到指针和T到const T 提升匹配,bool.short.char到 ...
- 判断当前VC是不是正在展示的活跃页面
viewController.isViewLoaded && viewController.view.window
- 小tip:CSS vw让overflow:auto页面滚动条出现时不跳动
原文地址:http://www.zhangxinxu.com/wordpress/?p=4552 一.水平居中布局与滚动条跳动的千年难题 当前web届,绝大多数的页面间布局都是水平居中布局,主体定个宽 ...
- ORACLE 导出(exp) & 导入(imp)
导出(exp) & 导入(imp) 利用Export可将数据从数据库中提取出来,就是将select的结果存到一个FS二进制文件上 利用Import则可将提取出来的数据送回到Ora ...
- ff
public class MyListenerProcessor implements BeanPostProcessor { @Override public Object postProcessB ...
- 在windows下面配置redis集群遇到的一些坑
最近工作不忙,就决定学习一下redis.因为一直在windows下工作,不会linux,没办法就选择在windows下配置redis. windows下配置redis集群的文章有很多,比如:http: ...
- discuz二次开发,分析和实现 之 向dz数据库插入自己的帖子吧
发个博客太麻烦了,难怪写博客的越来越少,吐一下,cnblogs的编辑器模板太丑! 最近开发社区 需要采集一些数据,使得模板输出有图文效果.就写了个简单的采集脚本,爬取目标站的内容,(用php 下载图片 ...
- 开启 mysql 远程访问
如何开启MySQL的远程帐号-1)首先以 root 帐户登陆 MySQL 在 Windows 主机中点击开始菜单,运行,输入“cmd”,进入控制台,然后cd 进入MySQL 的 bin 目录下,然后输 ...