一、第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个元素(快排和双向扫描法)相关推荐

  1. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  2. SDUT OJ 数据结构实验之排序一:一趟快排

    数据结构实验之排序一:一趟快排 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  3. sdutacm- 数据结构实验之排序一:一趟快排

    数据结构实验之排序一:一趟快排 TimeLimit: 1000MSMemory Limit: 65536KB SubmitStatistic ProblemDescription 给定N个长整型范围内 ...

  4. 八大排序算法之快速排序(下篇)(快排的优化+非递归快排的实现)

    目录 一.前言 1.快速排序的实现: 快速排序的单趟排序(排升序)(快慢指针法实现):​ 2.未经优化的快排的缺陷 二.快速排序的优化 1.三数取中优化 优化思路: 2. 小区间插入排序优化 小区间插 ...

  5. [Leedcode][第215题][JAVA][数组中的第K个最大元素][快排][优先队列]

    [问题描述][中等] 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素.示例 1:输入: [3,2,1,5,6,4] 和 k ...

  6. 数组中最大第K元素(快排思想)

    1. 利用快排的思想找数组中最大K元素,但是找到最大K元素 是排序后的数组 地址索引为K位置上的元素 但是利用快排的思想 不需要进行排序 只需要找到 地址索引=k 位置 前k-1个元素 不一定是排序的 ...

  7. 程序员面试金典 - 面试题 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 ...

  8. ACdream 1099——瑶瑶的第K大——————【快排舍半,输入外挂】

    瑶瑶的第K大 Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu Submit Status ...

  9. (十)更快的排序算法(归并、快排、基数)

    目标 1) 使用下列方法将一个数组按升序排序:归并排序.快速排序和基数排序 2) 评估排序的效率,讨论不同的方法的相对效率 目录 9.1 归并排序 9.1.1 归并数组 9.1.2 递归归并排序 9. ...

最新文章

  1. 20 个 Laravel Eloquent 必备的实用技巧
  2. strcpy函数的使用
  3. 【算法】一个简单的主成分分析(PCA)原理
  4. 算法与数据结构(python):线性查找与二分查找
  5. traceroute和mtr
  6. 电脑w ndows无法自动修复,windows 10自动修复无法修复你的电脑
  7. Maven工作笔记-在内网环境下开发Spring Boot(使用IDEA)
  8. 何恺明随机连接神经网络复现
  9. 7-218 修理牧场 (25 分)
  10. 最长回文子串_【每日编程142期】最长回文子串II
  11. 编程语言通用知识 编程语言的应用
  12. t-sql还原数据库_如何更新T-SQL工具箱数据库
  13. 讲述MPLS技术及其标准化进展
  14. 单相全桥逆变器带负载电流前馈的双闭环控制系统设计及仿真
  15. 浅谈人机工程应用在数字化工艺中的作用
  16. 修改FTP和MSTSC默认端口号
  17. Fast Deep Matting for Portrait Animation on Mobile Phone
  18. 日均5亿查询量,京东到家订单中心的ES架构演进
  19. 加班费计算(节假日、补班)
  20. IBM技术论坛:使用 Cobertura 和反射机制提高单元测试中的代码覆盖率

热门文章

  1. 零基础学python-如何从零基础自学Python?
  2. python必备基础代码-Python基础练习之用户登录实现代码分享
  3. 2018年python工作好找吗-2018年 Python面试必看的10个问题及答案
  4. python读音Python怎么读
  5. 科大讯飞语音识别率从97%提升至98% 用AI赋能方言保护
  6. kafka安装使用说明
  7. ES6数组的扩展~超详细、超好理解哦
  8. MySQL 用gourp by分组后取某一字段最大值
  9. mysql事务高级_mysql高级 标量 与事务
  10. linux的netperf测试,性能测试工具netperf安装使用