【算法与数据结构】在n个数中取第k大的数(基础篇)
生活随笔
收集整理的這篇文章主要介紹了
【算法与数据结构】在n个数中取第k大的数(基础篇)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
(轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/buptgshengod)
題目介紹
? ? ? ? ??在n個(gè)數(shù)中取第k大的數(shù)(基礎(chǔ)篇),之所以叫基礎(chǔ)篇是因?yàn)檫€有很多更高級(jí)的算法,這些以后再討論。本文用兩種最基本的方法來(lái)解決這個(gè)問(wèn)題。使用java語(yǔ)言描述。例子是十個(gè)數(shù)中取第三大的。算法一
? ? ? ? ? ? ?用冒泡法將n個(gè)數(shù)從大到小排序,再取第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("十個(gè)數(shù)里第三大的數(shù)");//題目System.out.println(); //換行for(i=0;i<10;i++){list[i]=(int) (Math.random()*100);//隨機(jī)生成100以內(nèi)十個(gè)數(shù)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]);} }顯示結(jié)果
算法二
? ? ? ?先取k個(gè)數(shù),將他們排序。再?gòu)氖O碌膎-k個(gè)數(shù)中取數(shù)與k個(gè)數(shù)中最小的比較,如果比k個(gè)數(shù)最小的大,則替代最小的數(shù)。以此類推。 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("十個(gè)數(shù)取第三大");//題目System.out.println();//換行for(i=0;i<list.length;i++){list[i]=(int) (Math.random()*100); System.out.print(list[i]+",");}/** 取數(shù)組前三個(gè)數(shù),將其按冒泡法從大到小排序*/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]);}}顯示結(jié)果
總結(jié)
以上是生活随笔為你收集整理的【算法与数据结构】在n个数中取第k大的数(基础篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【android-tips】androi
- 下一篇: 【算法与数据结构】关于代码运行时间复杂度