输入是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排序算法——快速排序的更多相关文章

  1. java排序算法(五):快速排序

    java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...

  2. Java排序算法之快速排序

    Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分 ...

  3. java排序算法之冒泡排序和快速排序

    总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...

  4. 《Java算法》排序算法-快速排序

    排序算法-快速排序: /** * 给定一个数组:按照从小到大排序. * 思路: * 1. 获取第一个数放入临时变量data,将大于data的数放右边,小于data的数放在左边. * 2. data左边 ...

  5. 常用Java排序算法

    常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...

  6. java排序算法(一):概述

    java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...

  7. java排序算法(四):冒泡排序

    java排序算法(四):冒泡排序 冒泡排序是计算机的一种排序方法,它的时间复杂度是o(n^2),虽然不及堆排序.快速排序o(nlogn,底数为2).但是有两个优点 1.编程复杂度很低.很容易写出代码 ...

  8. Java排序算法(三)

    Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...

  9. Java排序算法(二)

    java排序算法(二) 二.改进排序算法 2.1希尔排序 定义:希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. ...

随机推荐

  1. 解决 samba不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接

    net use * /del /y http://www.cnblogs.com/senior-engineer/p/4528378.html

  2. jQuery鼠标悬停内容动画切换效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. E(X+Y), E(XY), D(X + Y)

    \(X, Y\)为两个随机变量, \(p_X(x), p_Y(y)\)分别为\(X, Y\)的概率密度/质量函数, \(p(x, y)\)为它们的联合概率密度. \(E(X + Y) = E(X) + ...

  4. C#的值参数与引用参数

    值参数:在使用值参数时,是把变量的值传给函数,函数中对此变量的任何修改都不影响该变量本身的值. 引用参数:使用引用参数时,在函数中对此变量的修改会影响变量的值. 说简单点,值参数,就是我把身份证复印件 ...

  5. iis 发布静态 html 代码

    参考地址: http://jingyan.baidu.com/article/c843ea0b7d0b7177921e4a68.html 操作步骤:1.在当前发布网站中建立虚拟目录 2.点击当前网站 ...

  6. 【USACO 1.4】Mother's Milk

    /* TASK: milk3 LANG: C++ SOLVE: 倒水,dfs,枚举每一种倒法,ca[i][j]记录a和c桶的状态,因为总体积不变,故b的状态不需要记录. */ #include< ...

  7. C语言中数组名作为参数进行函数传递

    用数组名作函数参数与用数组元素作实参有几点不同. 1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的.因此,并不要求函数的 ...

  8. UML类图中的六种关系及实例【补充】

    ·继承和接口都比较常见,通过继承子类可以直接使用父类的(public,protected属性以及方法:而实现了Speakable接口的Person类必须定义其所有方法,包括speak()): ·依赖指 ...

  9. ubuntu16.04安装重启后显示黑屏

    环境 华硕笔记本 ubuntu16.04系统 Nvidia GTX970显卡 问题 装好ubuntu后提示重启,重启后直接黑屏 方法 开机grub界面按e键,linux打头的行,quiet后添加nom ...

  10. dotnet反编译工具大全

    反编译不是为了破解软件,而是在开发时更好的读懂程序干了什么,比如MVC的源码,如果使用1和4的VS插件能更好的进行断点跟踪. 常用,效率最高: 1.[.NET Reflector]首选,能比较好的反编 ...