用快排来查找第k小元素

 
import java.util.Scanner;


public class Searchk {

 /**
  * @param args
  */
 private int arrays[];
 public Searchk(int []array)
 {
  this.arrays=array;
 }
 public static void main(String[] args) {
  
	 System.out.println("input the number of the int array");
	 Scanner sc=new Scanner(System.in);
	 int n=sc.nextInt();
	 int array[]=new int[n];
	 for(int i=0;i<n;i++)
		 array[i]=sc.nextInt();
	 System.out.println("which one doyou like to lookfor?");
	 int k=sc.nextInt();
     Searchk s=new Searchk(array);
     s.getk(0, array.length-1, k-1);

  

 }
 //用快排查找枢轴
 public int partion(int low,int high)
 {
  int mid=(low+high)/2;
  int pivot=arrays[mid];
  arrays[mid]=arrays[low];
  while(low<high)
  {
   while(low < high && arrays[high]>=pivot)
    high--;
   arrays[low]=arrays[high];
   while(low<high && arrays[low]<=pivot)
	   low++;
    arrays[high]=arrays[low];
  }
  arrays[low]=pivot;
  return low;
 }
 //查找元素
 public void getk(int low,int high,int k)
 {
	 if(low<high)
	 {
	  int pa=partion(low,high);
	  if(pa==k)
	   System.out.println(arrays[pa]);
	  else if(pa>k-1)
	    getk(low,pa-1,k);
	  else
	    getk(pa+1,high,k);
	 }
 }


}


  查找第k小元素是一个老生常谈的问题,以前学习算法的时候也学过,只可惜没有听明白,要不然不会没有去实现的冲动啊!前几天看了一本关于java集合的书,讲到了可以利用快排的思路来解决查找第k小元素的问题。快排我熟,那是相当的熟,暑假的时候快排我是研究了好长时间了,枢轴不管怎么找我都尝试过了,不管是原理还是实现都烂熟于心,只是,经常忘了还有这么好的一个算法。现在把这个问题拿出来,突然觉得也没有原来看的那么复杂啊,只要是用心想肯定可以解决的。突然发现了,好多事情并不难,只是因为在开始干之前就已经把自己给打败了。在我找到心仪的工作之前,还会继续来研究这所谓的数据结构与算法,挺有意思的!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值