Java排序算法——快速排序

输入是List
package com.interview.sort; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class QuickSort2 { //输入是List<Integer> public static void main(String[] args) {
// TODO 自动生成的方法存根
List<Integer> list = new ArrayList<Integer>();
list.add(-1);
list.add(3);
list.add(-0);
list.add(-2);
list.add(-7);
list.add(-5);
QuickSort2 qs = new QuickSort2();
qs.quickSort(list);
Iterator<Integer> i = list.iterator();
while (i.hasNext()) {
int num = (Integer) i.next();
System.out.println(num);
} } public void quickSort(List<Integer> list) {
if (list.size() > 1) {
List<Integer> smaller = new ArrayList<Integer>();
List<Integer> same = new ArrayList<Integer>();
List<Integer> larger = new ArrayList<Integer>();
Integer mid = list.get(list.size() >> 1);
for (Integer i : list) {
if (i < mid) {
smaller.add(i);
} else if (i > mid) {
larger.add(i);
} else {
same.add(i);
}
}
quickSort(smaller);
quickSort(larger);
list.clear();
list.addAll(smaller);
list.addAll(same);
list.addAll(larger);
}
} }
输入是Array
import java.util.Arrays; //=================================================
// File Name : Arrays_Quick
//------------------------------------------------------------------------------
// Author : Common //类名:Arrays_Quick
//属性:
//方法:
class Arrays_Quick{
private int[] arrays;
private int curNum; public Arrays_Quick(int max) { //建立一个max长度的空数组
super();
arrays = new int[max];
curNum = 0;
} public void insert(int value){ //往空的数组里面增加元素
arrays[curNum] = value;
curNum++;
} public void display(){ //显示数组
System.out.println(Arrays.toString(arrays));
} public void QuickSort(){
int i=0;
int j=arrays.length-1; recQuickSort(i, j);
} public void recQuickSort(int i,int j){
// 结束条件
if(i == j )
return; int key = arrays[i];
int stepi = i; // 记录开始位置
int stepj = j; // 记录结束位置 while(j > i){
// j <<-------------- 向前查找
if(arrays[j] >= key){
j--;
}else{
arrays[i] = arrays[j];
//i++ ------------>>向后查找
while(j > ++i){
if(arrays[i] > key){
arrays[j] = arrays[i];
break;
}
}
}
} // 如果第一个取出的 key 是最小的数
if(stepi == i){
recQuickSort(++i, stepj);
return;
} // 最后一个空位留给 key
arrays[i] = key; // 递归
recQuickSort(stepi, i);
recQuickSort(j, stepj);
} } //主类
//Function : QuickSort
public class QuickSort { public static void main(String[] args) {
// TODO 自动生成的方法存根
int maxSize = 5;
Arrays_Quick arrays_demo = new Arrays_Quick(maxSize);
arrays_demo.insert(4);
arrays_demo.insert(5);
arrays_demo.insert(3);
arrays_demo.insert(1);
arrays_demo.insert(2);
arrays_demo.display();
arrays_demo.QuickSort();
arrays_demo.display();
} }

Java排序算法——快速排序的更多相关文章
- java排序算法(五):快速排序
java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...
- Java排序算法之快速排序
Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...
- java排序算法之冒泡排序和快速排序
总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...
- 《Java算法》排序算法-快速排序
排序算法-快速排序: /** * 给定一个数组:按照从小到大排序. * 思路: * 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边. * 2. data左边 ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- java排序算法(四):冒泡排序
java排序算法(四):冒泡排序 冒泡排序是计算机的一种排序方法,它的时间复杂度是o(n^2),虽然不及堆排序.快速排序o(nlogn,底数为2).但是有两个优点 1.编程复杂度很低.很容易写出代码 ...
- Java排序算法(三)
Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...
- Java排序算法(二)
java排序算法(二) 二.改进排序算法 2.1希尔排序 定义:希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. ...
随机推荐
- 浅谈SEO翻倍提升网站流量
本文是在简单了解并且熟悉SEO技术的基础上加上自己的总结归纳,对于SEO还是一个长期的工程不是一天就能一下优化排名第一.下面就是我对SEO的一些见解: 一.关键字选择 内容相关 搜索次数多,竞争小 主 ...
- HTML5基础知识(2)--标题标签的使用
1.HTML文档中包含各种级别的标题,各种级别的标题由<h1>到<h6>元素来定义,<h1>至<h6>标题标记中的字母h是英文headline的简称.其 ...
- Django-Json 数据返回
1 .引入Json import json json.dumps(数据)
- java设计模式(六) 命令模式
[命令模式]将"请求"封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作. 1,定义命令接口 package com.pattern.comm ...
- CDN 备胎技巧
如果你使用 CDN 服务,建议准备一个备胎,万一 CDN 服务挂了,可以从自己的服务器上读取: <script src="http://cdn.staticfile.org/jquer ...
- hdu1161 欧拉路
欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径:(每条边只经过一次而不是点) 在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路:如果最多有2个奇数点,那么出发点和到达点必定为该2点,那 ...
- 基于@Aspect的AOP配置
1. Spring 除了支持Schema 方式配置 AOP,还支持注解方式:使用 @Aspect 来配置 2. Spring 默认不支持 @Aspect 风格的切面声明,通过如下配置开启@Aspect ...
- java 附件上传时后台验证上传文件的合法性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- KVO内部实现原理
KVO的原理: 只要给一个对象注册一个监听, 那么在运行时, 系统就会自动给该对象生成一个子类对象, (格式如:NSKVONotifying_className), 并且重写自动生成的子类对象的被监听 ...
- Hadoop jobhistory历史服务器
Hadoop自带了一个历史服务器,可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map.用了多少个Reduce.作业提交时间.作业启动时间.作业完成时间等信息.默认情况下 ...