從100萬個數字中找最大的10個數(提前是元素都是int)?
思路演化闡述:
1、從10個數中找出最大的數?
思路1:先排序啊。
這也是我的第一思路,用冒泡呢?還是 直接插入 還希爾呢?我在腦子轉了一圈,在比較那個排序更優。
其實你做了之後發現,這些排序都的迴圈套迴圈,時間複雜度o(nxn)。下面給的氣泡排序
package bubblesort;
/* * 氣泡排序 從小到大排序
* 2023年7月22日15:00:46
* 唐凌峰
*/public class bubblesort2 ;
for(int i=0;ibubble[j]);
} };
//列印出排序好的陣列
for(int i=0;i
思路2: 假設第乙個元素就是最大。
再遍歷以後的9個元素,跟第乙個比,比第一大就互動。這樣的時間複雜度就是o(n)。
請看下面**:
package maxandmin;
/* * 查詢最大值
*/public class findmax ;
//假設第乙個是最大的或最小的
int minvalue=arraytest1[0];
for(int i=1;iminvalue)
};system.out.print(minvalue); }
public static void main(string args)
}
這樣不用排序也能找出最大的,而且效能提高了,是不是能妙。
2、如何從100萬個元素中找出10最大的元素?
思路1:還先排序,不用了吧,我們模仿從10元素個中找最大的。那個中不用排序的思路。
假設這100萬個無序序列的前10個元素是最大 。
從i=10開始遍歷這100萬個元素,跟前面的10個元素比較,只要比這個10個元素中的任何乙個大就交換
請看下面**實現:
package maxandmin;
/* * 從100萬無序數中,找出最大的10個 int取值範圍: -2147483648~2147483647
* 唐凌峰
* 2023年7月30日17:03:43
* 這個時間複雜度雖然是o(nxn) 其實比排序快多了 排序是100萬x 100萬 這個只有 10x100萬。一下效能提高了10萬倍!
*/public class findtenmax ;
//假定前10個數是最大的,然後拿後面的元素更這10個元素一一對比,只要比其中任何乙個大就換進去
int arrayassume=;
for(int i=10;iarrayassume[j])
} }
for(int k=0;k<10;k++) }
public static void main(string args)
}
這樣表面上看時間複雜度還是o() 其實你指向看這樣做的計算機值最壞的時候了 就:10x100萬步
如果你先排序,就是:100萬x100萬步。
效能一下提公升了 10萬倍,如果只找最大的5個,效能提高的可不是10萬倍
思路決定出路,現在對這話,理解的更有感悟。
這裡面思路妙在:假設 假設。
其實想想我們的直接插入排序,類似用的這個思路。
記得以前在鐵科院給動車做的乙個專案,每張表的資料至少100萬以上。現在看來有些地方可以深度優化的。
如何提公升Eclipse效能
eclipse作為開發人員強力推崇的開發工具之一,其與jbuilder相比,很多同盟都認為使用eclipse比使用jbuilder省記憶體,而且eclipse屬於免費開源專案,而像jbuilder和idea等均屬於商業非免費工具,當然還有其他一些說法。個人選擇eclipse作為主要開發工具的原因主要...
如何提公升Eclipse效能
eclipse作為開發人員強力推崇的開發工具之一,其與jbuilder相比,很多同盟都認為使用eclipse比使用jbuilder省記憶體,而且eclipse屬於免費開源專案,而像jbuilder和idea等均屬於商業非免費工具,當然還有其他一些說法。個人選擇eclipse作為主要開發工具的原因主要...
讓IIS支援10萬併發
適用的iis版本 iis 7.0,iis 7.5,iis 8.0 適用的windows版本 windows server 2008,windows server 2008 r2,windows server 2012 2 net framework相關設定 a 在machine.config中將 改...