java算法面试题:设计一个快速排序。双路快速排序,简单易于理解。
package com.swift; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; public class QuickSort {
/*
* 快速排序
*/ public static void main(String[] args) {
int[] strVoid = new int[] { 11, 66, 22, 0, 55, 2, 0, 11 };
QuickSort sort = new QuickSort();
sort.quickSort(strVoid, 0, strVoid.length - 1);
for (int i = 0; i < strVoid.length; i++) {
System.out.println(strVoid[i] + " ");
}
// 用比较器排序
List<Integer> list = new ArrayList<Integer>();
for (Integer i : strVoid) {
list.add(i);
}
Collections.sort(list, new Comparator<Integer>() { @Override
public int compare(Integer arg0, Integer arg1) {
int num = arg1 - arg0;
return num;
} });
for (Integer i : list) {
System.out.print(i + " | ");
}
} void quickSort(int[] strDate, int left, int right) {
int i, j, t, key;
if (left > right)
return; key = strDate[left]; // temp中存的就是基准数
i = left;
j = right;
while (i != j) {
// 从后找比key小的或者等的放在key的左边
while (strDate[j] > key && i < j)
j--;
// 从前找比key大的放在key的右边
while (strDate[i] <= key && i < j)
i++;
// 小于就交换位置,等于就停止
if (i < j) {
t = strDate[i];
strDate[i] = strDate[j];
strDate[j] = t;
}
}
// 两指针相等后,将第一个位置的值与相等处位置的值互换,完成第一轮排序
strDate[left] = strDate[i];
strDate[i] = key; quickSort(strDate, left, i - 1);// 继续处理左边的,这里是一个递归的过程
quickSort(strDate, i + 1, right);// 继续处理右边的 ,这里是一个递归的过程
}
}

这是我的思路,应该属于双路快速排序的一种,快速排序的解决思路太多了,有单路、双路、三路,每种的写法也各有不同,每个人的思路都千奇百怪。
java算法面试题:设计一个快速排序。双路快速排序,简单易于理解。的更多相关文章
- Java算法面试题(史上最强、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 算法面试题:一个List<Student>,要求删除里面的男生,不用Linq和Lamda,求各种解,并说明优缺点!
算法面试题:一个List,要求删除里面的男生,不用Linq和Lamda,求各种解,并说明优缺点! 解题思路 这是群里某位小伙伴去面试碰到的面试题,从题目本身来看,面试官应该是要考察面试者对泛型 Lis ...
- java算法面试题:排序都有哪几种方法?请列举。用JAVA实现一个快速排序。选择冒泡快速集合至少4种方法排序
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...
- java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序
package com.swift; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; publi ...
- java算法面试题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个, 如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
package com.swift; import java.util.Scanner; public class Hanzi_jiequ { public static void main(Stri ...
- Java算法面试题:编写一个程序,将e:\neck目录下的所有.java文件复制到e:\jpg目录下,并将原来文件的扩展名从.java改为.jpg
package com.swift; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; i ...
- java算法面试题:编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。
package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- Java算法面试题 一个顺子带一对
打牌里面经常出现的5张牌,一个顺子带一对,给你五张牌,比如:1,2,2,2,3 或者 5,6,7,4,4 或者 2,4,3,5,5 或者 7,5,9,6,9 ,这种情况就符合一个顺子带一对,则返回 t ...
- java算法面试题:写一个Singleton出来
package com.swift; public class Singleton { public static void main(String[] args) { /* * 写一个Singlet ...
随机推荐
- 算法学习分析-点分治 HDU 6269 Master of Subgraph
首先给出定义 点分治是一种处理树上路径的工具 挂出一道题目来:Master of Subgraph 这道题目让你求所有联通子图加和所能产生数字,问你1到m之间,那些数字可以被产生 这道题目,假如我们利 ...
- NppFTP小插件的使用
大家在Linux系统中配置运行环境时,一定会遇到相关配置文件的修改,虽说在Linux系统中可以使用vi,vim的命令进行文本编辑,但是操作起来还是没有在Windows系统中用的爽,特别是操作大文本量的 ...
- Luogu P3265 [JLOI2015]装备购买
好吧刚开始不知道自己在写什么,,,后来写了线性方程组,又过了一天一上午终于明白了... 当然题意很显然:求代价最小的极大线性无关组. 那就高斯消元(好吧刚开始我不会用它来解这道题qwq) 第一个循环是 ...
- Chapter10
package scala import java.io.{PrintStream, PrintWriter}import java.util.Date import scala.util.loggi ...
- svn地址迁移
关于svn设置如下: 1. 点击如果所示[Relocate]: 2. 会弹出两个框:一个让你输入用户名密码:一个是svn地址: 3. 先把svn地址改一下,然后输入用户名密码,点确定.就ok啦!
- UVALive - 6442
题目链接:https://vjudge.net/contest/241341#problem/I 题目大意:输入t,t组样例,输入n,m,有n个圆槽,m个硬币,接下来m行代表每个硬币所在的位子,要求你 ...
- remote error: You can't push to git 解决办法
- CheatEngine-内存修改
0.备注+待完成 //备注 a). 如果有方括号,就是说CE认为找 到了数值的指针了 //待完成 a). 自动导出外挂 b). 菜单栏中"表单"下的lua是做什么用的 c). CE ...
- Maven的安装以及介绍
附录:带阿里源的maven用户设置文件-settings.xml <?xml version="1.0" encoding="UTF-8"?> &l ...
- MVC中 Remote的用法
一.web.config加入 <appSettings> <add key="ClientValidationEnabled" value="t ...