【算法与数据结构】在n个数中取第k大的数(基础篇)
生活随笔
收集整理的這篇文章主要介紹了
【算法与数据结构】在n个数中取第k大的数(基础篇)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(轉載請注明出處:http://blog.csdn.net/buptgshengod)
題目介紹
? ? ? ? ??在n個數中取第k大的數(基礎篇),之所以叫基礎篇是因為還有很多更高級的算法,這些以后再討論。本文用兩種最基本的方法來解決這個問題。使用java語言描述。例子是十個數中取第三大的。算法一
? ? ? ? ? ? ?用冒泡法將n個數從大到小排序,再取第k大。 public class test {public static void main(String []args){int i,j;final int n=10;final int k=3;boolean flag=true;int[] list=new int[n];System.out.print("十個數里第三大的數");//題目System.out.println(); //換行for(i=0;i<10;i++){list[i]=(int) (Math.random()*100);//隨機生成100以內十個數System.out.print(list[i]+",");} for(j=0;j<list.length-1;j++){for(i=0;i<list.length-1;i++){if(list[i]>=list[i+1]){}else{int m=list[i];list[i]=list[i+1];list[i+1]=m;}}}System.out.println(); //換行for(i=0;i<10;i++){ System.out.print(list[i]+",");} System.out.println(); //換行System.out.print("答案是"+list[k-1]);} }顯示結果
算法二
? ? ? ?先取k個數,將他們排序。再從剩下的n-k個數中取數與k個數中最小的比較,如果比k個數最小的大,則替代最小的數。以此類推。 public class Test {public static void main(String[] args){int i,j,m;final int n=10;final int k=3;int[] list=new int[n];System.out.print("十個數取第三大");//題目System.out.println();//換行for(i=0;i<list.length;i++){list[i]=(int) (Math.random()*100); System.out.print(list[i]+",");}/** 取數組前三個數,將其按冒泡法從大到小排序*/for(j=0;j<k-1;j++){for(i=0;i<k-1;i++){if(list[i]>=list[i+1]){}else{int t=list[i];list[i]=list[i+1];list[i+1]=t;}}}for(i=k;i<n;i++){if(list[k-1]>=list[i]){}else{list[k-1]=list[i];for(j=0;j<k-1;j++){for(m=0;m<k-1;m++){if(list[m]>=list[m+1]){}else{int t=list[m];list[m]=list[m+1];list[m+1]=t;}}}}}System.out.println();System.out.print("第三大的是"+list[k-1]);}}顯示結果
總結
以上是生活随笔為你收集整理的【算法与数据结构】在n个数中取第k大的数(基础篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【android-tips】androi
- 下一篇: 【算法与数据结构】关于代码运行时间复杂度