快速排序
来源:互联网 发布:centos 别名 编辑:程序博客网 时间:2024/06/15 19:18
//最近用冒泡排序写了个逻辑,突然发现每次程序一跑到那里就卡住了,感觉是冒泡排序太费程序了吧应该
//就在网上看了下快速排序的方法
//形象的就是网上说的那个排运动员身高的举例子说明:
//说有10个运动员没按身高排成了一列
A (2.00米) B (1.00米) C (1.55米) D (1.83米) E (1.62米) F (3.00米) G (0.5米) H (1.56米) I(5.90米) J(4.1米)
//然后让他们从小到大排列,于是就请来了 甲 乙 两个人来干这个事!甲 跑到列的最左边 乙 跑到列的最右边
//他俩规定好了一个人为基准 就是著名的A运动员身高2米:
//然后甲对乙说你从你那边往我这边找比A(2米)矮的人过来,然后乙就开始从第十个(G)开始向甲的方向开始
//找比A(2米)矮的人,然后找到了第8个(H)1.56米,他就说找到了,然后给甲扔了过去,
//然后乙说 你也从你那边开始找比A(2米)高的人过来,然后甲就开始从左边开始找比A高的人,然后他找到了F(3米),然后给乙丢了过去:
//然后甲说,又该你了找吧,比A矮的,然后乙开始找,找到了G(1.5米),给甲丢了过去:
//然后乙对甲说,该你了,甲刚要开始找,发现乙就在前面,顿时笑了说,行了这一轮结束了,先把A弄过来吧,然后就把A弄过来了:
//这时候A的左边全是比A矮的 右边全是比A高的,
//然后,甲乙把从A开始分开成两组,一组一组的开始按照刚才这个方法开始找去了,乐此不疲,知道不能再分组了为止!
//这是目前我所理解的快速排序!下面这是我改的网上的代码,他本来是排数组的,我正好要排list的值就改了下,挺好用的!
import java.util.ArrayList;
import java.util.List;public class paiXu {
if (null == arrays || lenght < 1) {
System.out.println("input error!");
return;
}
_quick_sort(arrays, 0, lenght - 1);
}
if(start>=end){
return;
}
int i = start;
int j = end;
long value = Long.parseLong(arrays.get(i));
boolean flag = true;
while (i != j) {
if (flag) {
if (value > Long.parseLong(arrays.get(j))) {
swap(arrays, i, j);
flag=false;
} else {
j--;
}
}else{
if(value<Long.parseLong(arrays.get(i))){
swap(arrays, i, j);
flag=true;
}else{
i++;
}
}
System.out.println("i: "+i+" j:"+j+" star: "+start);
}
snp(arrays);
_quick_sort(arrays, start, j-1);
_quick_sort(arrays, i+1, end);
}
//打印一下每次排序以后的情况
public void snp(List< String> arrays) {
for (int i = 0; i < arrays.size(); i++) {
System.out.print(arrays.get(i) + " ");
}
System.out.println();
}
//list的位置互换,因为list每次remove以后长度都会变化 所以我提前再换的位置上加一
private void swap(List< String> arrays, int i, int j) {
String tempi,tempj;
tempi = arrays.get(i);
tempj = arrays.get(j);
arrays.add(i+1, tempj);
arrays.remove(i);
arrays.add(j+1, tempi);
arrays.remove(j);
// arrays.add(j, temp);
}
//测试一下
public static void main(String args[]) {
List< String> list = new ArrayList<>();
list.add("6");
list.add("1");
list.add("3");
list.add("2");
list.add("9");
list.add("5");
list.add("5");
list.add("5");
list.add("51");
list.add("1234567890123456789");
list.add("1234567890123456788");
list.add("57");
list.add("8");
list.add("85");
list.add("8");
list.add("1233567890123456789");
list.add("8488");
list.add("718646");
paiXu q = new paiXu();
int[] a = { 1, 2, 4,3,5,6,7,8};
q.quick_sort(list,list.size());
}
}
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 在cmd中登录Mysql数据库
- HDU5543-Pick The Sticks
- Map实现类细节
- tensorflow做交叉验证遇到InvalidArgumentError
- ONVIF协议 简介
- 快速排序
- 10.[个人]C++线程入门到进阶(10)----多线程经典面试题
- rpc 第一弹 服务注册与客户端请求
- Quagga Case 4
- Python的Switch语句
- HashCode和hash值
- Ubuntu android studio 调试 android wear 智能手表
- 让你彻底明白hive数据存储各种模式
- 转:navicat远程连接mysql,2003 can't connect to mysql server on 10038