快速排序-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 ...
随机推荐
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
- PLSQLDeveloper 提示不能初始化?
原因: oracle数据库是64位的,而 PLSQL Developer 只有32位的! 下载PLSQL_Developer地址: http://pan.baidu.com/share/link?sh ...
- 让Asp.net mvc WebAPI 支持OData协议进行分页查询操作
这是我在用Asp.net mvc WebAPI 支持 OData协议 做分页查询服务时的 个人拙笔. 代码已经开发到oschina上.有兴趣的朋友可以看看,欢迎大家指出不足之处. 看过了园子里的几篇关 ...
- 转:亿级Web系统的高容错性实践(好博文)
亿级Web系统的高容错性实践 亿级Web系统的高容错性实践 背景介绍 大概三年前,我在腾讯负责的活动运营系统,因为业务流量规模的数倍增长,系统出现了各种各样的异常,当时,作为开发的我,7*24小时地没 ...
- poj1014(还需要改动)
#include <stdio.h> int n[6]; int main() { freopen("in.txt","r",stdin); int ...
- IOS 数据库
系统自带可以储存字段的字典: NSUserDefaults *user = [[NSUserDefaults alloc] init]; 存 : [user setObject:@"YES& ...
- netty学习
1.不选择java原生nio的原因 (1)nio的类库和api繁杂 (2)需要具备其他的额外的技能做铺垫,例如熟悉java多线程编程. (3)可靠性能力补齐的工作量和难度都非常大,例如客户 ...
- jQuery与其他JS库共存
* 事件 * jQuery与其他JS库共存 * 调用jQuery.noConflict()方法 * 表示jQuery将"$"符号的使用权交出 * 通过两种方式将"$&qu ...
- 深入研究C语言 第二篇(续)
1. 关于如下的程序,关于结构体的拷贝,拷贝是拷贝到内存中的什么地方? 我们进入debug进行反汇编,单步等操作跟踪查看.发现: 在main中,我们看到call 0266应该对应的是转跳到func处执 ...
- jxl 处理 Excel 样式
jxl 能够操作的 excel 样式: 1. Workbook的格式设置(代表一个excel文件) 2. Sheet的格式设置(代表一个表格) 3. Cell的格式设置(代表一个单元格) PS:此jx ...