这个程序严格的说来不是一个排序的程序,它的唯一作用就是利用快速排序的方法快速实现查找一个数组中第几大的数。
e.g 假如有个数组array = {1,32,64,45}
你输入2
这个程序会告诉你第二小的数是32
我目前掌握的就这两种方案,相对来说我觉得第一种方案更简单,但理解难一点;第二种方案程序稍微复杂一点,但理解容易些,呵呵,当然啦这只是我个人的看法。具体的大家看代码就晓得了。
如果大家有更好的方案,希望大家能来我的博客留言告诉我^_^
---------------------------------------------------------------------------------------------
最近真的要好好看下算法了,全忘记了,这两种方案,搞的我头晕了几个小时 - -!
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;
}
}
---------------------------------------------------------------------------------------------
最近真的要好好看下算法了,全忘记了,这两种方案,搞的我头晕了几个小时 - -!