双指针快速排序
来源:互联网 发布:廊坊北商网络 编辑:程序博客网 时间:2024/06/05 18:14
思想
同样去一个数位基准数进行递归分区,两个指针分别从头和尾开始遍历数据,如果头不大于基准数,尾不小于基准数则不改位置,否则尾数与头交换。
实现思路
两个循环,循环执行条件第一个是尾数不小于基准数,且尾下标大于头下标,第二个相反,如果结束则交换数。外层一个循环执行条件为头不大于尾。
实现代码
package sort;import java.util.Random;public class TPQuickSort { /** * 双指针快速排序;通过头指针与尾指针同时前进,找到比分界值@pivot大或者小的值进行交换; * 千万级随机数耗时1608毫秒 * @param arr * @param pivot */ public static void quickSort(int[] arr) { quickSort(arr, 0, arr.length - 1); } private static void quickSort(int[] arr, int begin, int end) { if (begin < end) { int pos = partition(arr, begin, end); quickSort(arr, begin, pos - 1); quickSort(arr, pos + 1, end); } } private static int partition(int[] arr, int begin, int end) { int pivot = arr[begin]; while (begin < end) { /* * 从后往前遍历,找到比pivot小的值 */ while (begin < end && arr[end] >= pivot) { end--; } arr[begin] = arr[end]; /* * 从前往后遍历,找到比pivot大的值; */ while (begin < end && arr[begin] <= pivot) { begin++; } arr[end] = arr[begin]; } arr[begin] = pivot; return begin; } public static void main(String[] args) {// int[] arr = { 8, 5, 6, 7, 2, 3 }; int[] arr = new int[10000000]; for(int i = 0; i < arr.length; i++){ arr[i] = new Random().nextInt(10000000); } long startTime = System.currentTimeMillis(); TPQuickSort.quickSort(arr); long endTime = System.currentTimeMillis(); System.out.println("时间" + ":" + (endTime - startTime));// for ( int i : arr ) {// System.out.println(i);// } }}
阅读全文
0 0
- 双指针快速排序
- 双指针快速排序
- 排序算法---之交换排序(冒泡排序&快速排序-左右指针法,挖坑法,前后指针法)
- C指针原理(30)-at&t汇编-快速排序
- 用函数指针实现的快速排序算法
- 快速排序算法(两个指针一前一后逐步向后扫描)
- c++实现数组和指针的快速排序
- 【数据结构】快速(QuickSort)排序之——左右指针法
- 【数据结构】快速(QuickSort)排序之——前后指针法
- 使用快速排序算法对字符串数组进行排序(复习指向指针的指针以及指针数组的使用)
- 双支点快速排序排序法(DualPivotQuicksort)
- 快速排序、三路快排、双基准
- 双路快速排序法
- 快速排序中对指针地址所指向的值进行排序的代码
- 经典排序算法-快速排序(挖坑法、前后指针法)、基数排序
- 快速排序算法原理及实现(单轴快速排序、三向切分快速排序、双轴快速排序)
- 指针排序
- 快速排序
- 这是一封给程序员的1024挑战书
- Excel之按原格式复制粘贴工作表
- 大咖云集,技术宅开趴倒计时 —— 2017 Kubernetes Meetup | 成都站
- Docker容器实时迁移的再次尝试
- 算法学习01- 生兔子的问题
- 双指针快速排序
- 第八周项目4稀疏矩阵的三元组表示的实现及应用(1)
- 2017CCPC哈尔滨理工大学站赛后总结
- PHP大数组分组执行
- 计算机网络实验,JAVA实现一个简单GBN协议,模拟引入数据包的丢失,验证协议的有效性
- 可爱的大标题:位运算及其应用
- mysql中 对同一个表先查询后删除时报错,怎么破的问题
- Spring Cloud Feign 的使用注意事项
- 随笔小计