【数据结构与算法】快排
来源:互联网 发布:卡密充值系统源码 编辑:程序博客网 时间:2024/05/16 15:22
快速排序是排序中速度比较优异的一种算法
核心函数是一个递归的划分算法partition函数,参数为list,low和high,执行一次函数的运行情况:
(1)因为是递归函数,那么在函数内部必须有一个if来检测递归的终止,条件就是low<high,然后才进入函数。如果low<high,那么说明此时的list中必然会有2个或者2个以上的元素,那么还是要进行排序的,否则,只有一个元素了,就直接return。
(2)设置两个指针l,h,指向low和high两个位置,同时选定key值为第一个元素的值(实际是选定哪个否可以,只是选定第一个的话函数的实现更加简单)。
(3)进入一个while循环,条件就是l<h,即还可以找到比key大或者小的元素。循环体内部,先从高位找,找到第一个比key小的元素,就让其与list[l]交换,然后再从地位找,找到第一个比key大的元素,让其与list[h]交换。这就完成了一次交换,再次进入while循环。
(4)跳出while以后,说明此时l==h,左边都是比key小的,右边都是比key大的,而且最后一次移位剩下的空位肯定是l或者h的一个,但是此时l==h,所以直接让list[l]=key即可。至此,一趟移位完成了。之后就是在k左边和右边的list递归即可。
代码:
import java.util.ArrayList;import java.util.List;public class QS {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(-1);list.add(5);list.add(2);list.add(8);list.add(7);new QS().QSort(list);for(int i:list){System.out.println(i);}}private void partition(int low,int high,List<Integer> list){ if (low<high) { int l = low; int h = high; int key = list.get(low); while(l<h){ while(l<h&&key<=list.get(h)) h--; list.set(l, list.get(h)); while(l<h&&key>=list.get(l)) l++; list.set(h, list.get(l)); } list.set(l, key); partition(0, l-1, list); partition(l+1, high, list); }}public void QSort(List<Integer> list){partition(0, list.size()-1, list);}}
0 0
- 【数据结构与算法】快排
- 快排----数据结构与算法分析
- 数据结构与算法---快排 Java
- 数据结构与算法(九)快排
- Python 数据结构与算法——快排
- 归并与快排算法
- 数据结构与算法系列----直插,快排,堆排,归并排序讲解
- 数据结构算法-快排和归并
- 数据结构与算法复习之排序算法——冒泡、插入、快排、归并
- 二分查找与快排算法
- 冒泡排序与快排算法
- 快排代码 《数据结构》
- 数据结构之快排
- 数据结构之快排
- 数据结构之快排
- 【数据结构】快排
- 数据结构之快排
- 算法----快排算法
- Class<T>相比Class的灵活运用
- c++ 类的初步总结
- iOS开发中的一些图片上传压缩处理
- 总结的一些MySQL数据库面试题
- 如何查看dll或者exe是X86还是X64架构
- 【数据结构与算法】快排
- AJAX系列一之初印象
- 科目二:倒车入库考试技巧详细图解
- 一种快速的公交专用车道检测方法
- 如果在VS2013创建WebService并在IIS中发布
- Linux下 JNI的使用
- 删除链表中倒数第n个节点
- dhtmlTree简单实例以及基本参数设置
- Maven Assembly插件介绍