关于快速排序的JAVA实现,有两种方案!

这个程序严格的说来不是一个排序的程序,它的唯一作用就是利用快速排序的方法快速实现查找一个数组中第几大的数。
e.g 假如有个数组array = {1,32,64,45}
你输入2
这个程序会告诉你第二小的数是32

我目前掌握的就这两种方案,相对来说我觉得第一种方案更简单,但理解难一点;第二种方案程序稍微复杂一点,但理解容易些,呵呵,当然啦这只是我个人的看法。具体的大家看代码就晓得了。

如果大家有更好的方案,希望大家能来我的博客留言告诉我^_^
import javax.swing.*;
public class paixu1
{
public static void main(String[] args)
{
int[] data={10,15,46,18,12,16,54,17,3,5};
int k;
k = partition(data,0,9);

String input = JOptionPane.showInputDialog(null,"请选择数组中要找的第几小的数(1-10的整数)");
int xuanze = Integer.parseInt(input);
while(k!=xuanze-1)
{
if(xuanze-1>k)
k=partition(data,k+1,9);
else
k=partition(data,0,k-1);
}
System.out.println("第"+xuanze+"小的数是:"+data[k]);

}
/* public static int partition(int[] data,int x,int high)//第一种方案
{
int temp ,n= data[x],low= x+1;
while(low<high)
{
while(low<=high&&n<=data[high])
high--;
while(low<=high&&n>data[low])
low++;
if(low>=high) break;
temp=data[low];
data[low]=data[high];
data[high]=temp;
}
data[x]=data[high];
data[high]=n;
return high;
}*/
public static int partition(int[] data,int low,int high)//第二种方案
{
int temp=data[low];
while(low<high)
{
while(low<high&&data[high]>temp)
high--;
if(low<high)
{
data[low]= data[high];
low++;
}
while(low<high&&data[low]<temp)
low++;
if(low<high)
{
data[high] = data[low];
high--;
}

}
data[low] = temp;
return low;
}
}


---------------------------------------------------------------------------------------------
最近真的要好好看下算法了,全忘记了,这两种方案,搞的我头晕了几个小时 - -!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值