经典排序:第k个元素(快排和双向扫描法)
一、第k个元素:以尽量高的效率求出一个乱序数组中按数值顺序的第k个元素
乱序数组
法一:利用快速排序,算法时间复杂度O(Nlogn)
法二:利用分区排序法(双向扫描法)
依次与主元比较,比主元大的排在右面不变,比主元小的指针交换位置,得到如下数组
伪代码
selectk(A,p,r,k){q=partition(A,p,r); //q主元的下标 qk=q-p+1; //主元是第几个元素 if(qk==k) //K为所求元素的值 return A[q]; //利用数组下标返回元素的值 else if(qk>k)return selectk(A,p,q-1,k);elsereturn selectk(A,q+1,r,k-qk) //右半区间,初始下标改变为q+1,返回k的值就为k-qk
}
partition(A,p,r)
代码
package selectk;public class Selectk {public static int selectk(int[] A,int p,int r,int k){int q=partition(A,p,r); //q主元的下标 int qk=q-p+1; //主元是第几个元素 if(qk==k) //K为所求元素的值 return A[q]; //利用数组下标返回元素的值 else if(qk>k)return selectk(A,p,q-1,k);elsereturn selectk(A,q+1,r,k-qk); //右半区间,初始下标改变为q+1,返回k的值就为k-qk }private static int partition(int[] a, int p, int r) {// TODO Auto-generated method stubreturn 0;}public static void main(String[] args) {int[]A= {3,9,7,6,1,2};int k=selectk(A,0,A.length,2);System.out.println(k);AssertionError.assertThat(k).isEqualTo(2);}
}
经典排序:第k个元素(快排和双向扫描法)相关推荐
- C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序
常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...
- SDUT OJ 数据结构实验之排序一:一趟快排
数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...
- sdutacm- 数据结构实验之排序一:一趟快排
数据结构实验之排序一:一趟快排 TimeLimit: 1000MSMemory Limit: 65536KB SubmitStatistic ProblemDescription 给定N个长整型范围内 ...
- 八大排序算法之快速排序(下篇)(快排的优化+非递归快排的实现)
目录 一.前言 1.快速排序的实现: 快速排序的单趟排序(排升序)(快慢指针法实现): 2.未经优化的快排的缺陷 二.快速排序的优化 1.三数取中优化 优化思路: 2. 小区间插入排序优化 小区间插 ...
- [Leedcode][第215题][JAVA][数组中的第K个最大元素][快排][优先队列]
[问题描述][中等] 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素.示例 1:输入: [3,2,1,5,6,4] 和 k ...
- 数组中最大第K元素(快排思想)
1. 利用快排的思想找数组中最大K元素,但是找到最大K元素 是排序后的数组 地址索引为K位置上的元素 但是利用快排的思想 不需要进行排序 只需要找到 地址索引=k 位置 前k-1个元素 不一定是排序的 ...
- 程序员面试金典 - 面试题 17.14. 最小K个数(快排划分O(n))
1. 题目 设计一个算法,找出数组中最小的k个数.以任意顺序返回这k个数均可. 示例: 输入: arr = [1,3,5,7,2,4,6,8], k = 4 输出: [1,2,3,4]提示: 0 &l ...
- ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】
瑶瑶的第K大 Time Limit:2000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu Submit Status ...
- (十)更快的排序算法(归并、快排、基数)
目标 1) 使用下列方法将一个数组按升序排序:归并排序.快速排序和基数排序 2) 评估排序的效率,讨论不同的方法的相对效率 目录 9.1 归并排序 9.1.1 归并数组 9.1.2 递归归并排序 9. ...
最新文章
- 20 个 Laravel Eloquent 必备的实用技巧
- strcpy函数的使用
- 【算法】一个简单的主成分分析(PCA)原理
- 算法与数据结构(python):线性查找与二分查找
- traceroute和mtr
- 电脑w ndows无法自动修复,windows 10自动修复无法修复你的电脑
- Maven工作笔记-在内网环境下开发Spring Boot(使用IDEA)
- 何恺明随机连接神经网络复现
- 7-218 修理牧场 (25 分)
- 最长回文子串_【每日编程142期】最长回文子串II
- 编程语言通用知识 编程语言的应用
- t-sql还原数据库_如何更新T-SQL工具箱数据库
- 讲述MPLS技术及其标准化进展
- 单相全桥逆变器带负载电流前馈的双闭环控制系统设计及仿真
- 浅谈人机工程应用在数字化工艺中的作用
- 修改FTP和MSTSC默认端口号
- Fast Deep Matting for Portrait Animation on Mobile Phone
- 日均5亿查询量,京东到家订单中心的ES架构演进
- 加班费计算(节假日、补班)
- IBM技术论坛:使用 Cobertura 和反射机制提高单元测试中的代码覆盖率