网站首页 > java教程 正文
快速排序算法总结:
平均时间复杂度O(NlogN) 最差的情况每次都比较情况下O(N*N)
算法的思想:
条件:
1.基准值作为比较值,一般都取得是第一个元素
2.两个哨兵值,一个从左边开始扫描的哨兵i和一个从右边开始扫描的哨兵j
3.当两个哨兵相遇的时候交换哨兵的值和基准值,完成一次循环的比较
4.相遇的值也就是基准值把该数组分成两个数组,一个全部小于基准值的数组,一个全部大于基准值的数组,也就是二分查找的思想。
5.两个数组重现开始排序,循环的递归和二分查找操作。
Java代码的实现:
public class QuickSortTest {
public void main (){
//定义一个数组
int[] arr = {23,984,263,9,18,47,56,2,34,23,11,14,78};
//定义一个排序的方法
quickSort(arr,0,arr.length-1);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/**
* 快速排序算法
* @param arr
* @param low
* @param high
*/
private void quickSort(int[] arr, int low, int high) {
//校验数组只有一个元素时不比较
if (low >= high) {
return;
}
//1.定义基准值,哨兵值i哨兵j,交换值t
int temp = arr[low]; // 不能写死,循环递归用参数值
int i = low;
int j = high;
int t;
//2.开始从右边和左边开始扫描,右边小于的值和左边大于的数值进行交换处理,
while (i<j) { //前提条件是i<j的情况下比较
//从右边开始递减处理 大于基准值是正常的
while (temp <= arr[j] && i<j) {
j--;
}
//从左边开始递增 小于基准值是正常的
while (temp >= arr[i] && i < j) {
i++;
}
//两边都是不正常的情况下开始交换数值
if (i < j) { //保证大前提是i<j
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//3.前提条件i=j两个哨兵相遇之后,交换基准值和相遇值
arr[low] = arr[i];
arr[i] = temp;
//4.开始二分查找的循环递归,直到两边的数组排序完成
quickSort(arr,low,j-1);
quickSort(arr,j+1,high);
}
}
猜你喜欢
- 2024-10-24 算法篇:Java实现九种排序算法4:选择排序之简单选择排序
- 2024-10-24 Java和JavaScript实现的经典算法——冒泡排序
- 2024-10-24 「图解数据结构」一组动画彻底理解快速排序
- 2024-10-24 排序算法之快速排序(快速排序的排序过程)
- 2024-10-24 Java中List排序的3种方法(java中list的用法)
- 2024-10-24 算法篇:Java实现九种排序算法5:选择排序之堆排序
- 2024-10-24 Java 七大排序(详解 + 代码 + 变种)
- 2024-10-24 技术分享:这可能最快的稳定排序算法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)