package datastructure.chapter01;
import java.util.Arrays;
public class Find_k_biggest_number {
public static void main(String args[]) {
int len=1000000;
int k=7;
int a[]=new int[len];
for(int i=0;i<len;i++) {
a[i]=(int)(Math.random()*len);
}
/*
int a[]= {1,1,1,1,5,7222,66};
int k=2;
*/
Find_k_biggest_number f=new Find_k_biggest_number();
System.out.println("冒泡排序,第"+k+"大的数是:"+f.BubbleSort(a, k));
//System.out.println("排序结果,第"+k+"大的数是"+f.find_k_number(a, k));
}
//冒泡排序算法实现
public int BubbleSort(int a[],int k) {
long startTime=System.currentTimeMillis();
int temp;
for(int i=0;i<a.length-1;i++) {
for(int j=0;j<a.length-i-1;j++) {
if(a[j]<a[j+1]) {//递减排序,左边元素值比右边小则右移,
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
long endTime=System.currentTimeMillis();
System.out.println("冒泡排序执行时间:"+(endTime-startTime)/1000+"秒");
System.out.println("冒泡排序结果"+Arrays.toString(a));
return a[k-1];
}
//先读入前k个元素排序,再逐个比较剩余元素
public int find_k_number(int a[],int k) {
long startTime=System.currentTimeMillis();
//读入前k个元素
int b[]=new int[k+1];
for(int i=0;i<k;i++) {
b[i]=a[i];
}
//对前k个元素进行递减排序
int temp;
for(int i=0;i<k-1;i++) {
for(int j=0;j<k-i-1;j++) {
if(b[j]<b[j+1]) {
temp=b[j+1];
b[j+1]=b[j];
b[j]=temp;
}
}
}
//数组b中最小元素与数组a中剩余元素逐个比较,若数组a中元素大于b[k-1],将a中元素放在b的合适位置
for(int i=k;i<a.length;i++) {
if(a[i]>b[k-1]) {
b[k]=a[i];
int tem;
for(int m=0;m<b.length-1;m++) {
for(int n=0;n<b.length-i-1;n++) {
if(b[n]<b[n+1]) {
tem=b[n+1];
b[n+1]=b[n];
b[n]=tem;
}
}
}
}
}
long endTime=System.currentTimeMillis();
System.out.println("排序执行时间:"+(endTime-startTime)/1000+"秒");
System.out.println("排序结果"+Arrays.toString(b));
return b[k-1];
}
}