快速排序与快速选择 (Java)
来源:互联网 发布:电极编程 编辑:程序博客网 时间:2024/06/07 23:15
快速选择可以在nlogn的时间复杂度下得到一组无序数字的第k大,原理基于快速排序,每次以某个数字为中点分成的左右两段,左边都小于等于分割数,而右边都大于等于分割数,快速选择的求解速度要比全部排序后再取第k大快
/** * Created by tcgogogo on 16/8/18. */class Solution { public void outPut(int[] nums) { for (int i = 0; i < nums.length; i++) { System.out.print(nums[i] + " "); } System.out.println(); } public void swap(int[] nums, int i, int j) { if (i == j) { return; } int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } public void quickSort(int[] nums, int left, int right) { if (left > right) { return; } int i = left, j = right; while (i < j) { while (i < j && nums[j] >= nums[left]) { j --; } while (i < j && nums[i] <= nums[left]) { i ++; } if(i < j) { swap(nums, i, j); } } swap(nums, left, i); quickSort(nums, left, i - 1); quickSort(nums, i + 1, right); } public int quickSelect(int[] nums, int left, int right, int k) { if (left > right) { return 0; } int i = left, j = right; while (i < j) { while (i < j && nums[j] >= nums[left]) { j --; } while (i < j && nums[i] <= nums[left]) { i ++; } swap(nums, i, j); } swap(nums, left, i); if(k == i - left + 1) { return nums[i]; } else if(k < i - left + 1) { return quickSelect(nums, left, i - 1, k); } else { return quickSelect(nums, i + 1, right, k - (i - left + 1)); } }}
0 0
- 快速排序与快速选择 (Java)
- 快速排序与选择
- 选择排序与快速排序
- 选择排序与快速排序
- 快速排序与快速选择算法
- java 选择,冒泡,快速排序
- java排序 冒泡 选择 快速
- 快速排序、归并排序与选择排序
- 排序:快速排序与选择排序
- java 快速排序 插入排序 选择排序
- 快速排序,选择排序
- 选择排序/快速排序
- 快速排序,选择排序
- 快速排序->快速选择算法
- 快速排序和快速选择
- 快速排序及快速选择
- 快速排序和快速选择
- Java 排序 快速排序 冒泡排序 选择排序 插入排序
- 理解HTTP幂等性
- Android系统源码阅读(4):Service在新进程中启动过程
- java的main函数
- hdu1565 方格取数(1)--最大点权独立集 & Dinic
- 计蒜客挑战难题:字符串长度
- 快速排序与快速选择 (Java)
- 个人信息频泄露?公安警告:快递包装勿乱扔
- 《Qt Creator快速入门》第二版主要更新内容
- 设计模式-策略模式
- Git学习笔记
- iOS开发之推荐一款github管理神器SourceTree
- 学习日记20160817
- JS动态生成DIV
- NSDateFormatter用法