發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊(cè)
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
我們的目標(biāo)是從一個(gè)int的Array中,找出最小值。
作為demo程序,我們先增加一個(gè)類,用來模擬Array,如下定義:
class CArray { const int DefaultCapacity = 100; private int[] array; private int curPosition = -1; public CArray() { this.array=new int[DefaultCapacity]; curPosition = -1; } public CArray(int capacity) { this.array = new int[capacity]; curPosition = -1; } public void Insert(int value) { if (curPosition + 1 >= array.Length) throw new Exception("數(shù)組已經(jīng)達(dá)到最大長(zhǎng)度,無法再插入了。"); curPosition++; array[curPosition] = value; } public void Clear() { curPosition = -1; this.array=new int[this.array.Length]; } public void Display() { Console.WriteLine(); for (var i = 0; i < this.curPosition; i++) Console.Write(string.Format("{0}, ", this.array[i])); } #region 統(tǒng)計(jì)函數(shù) public int Max() { int maxValue=this.array[0]; for (var i = 1; i <= this.curPosition; i++) if (maxValue < this.array[i]) maxValue = this.array[i]; return maxValue; } public int Min() { int minValue = this.array[0]; for (var i = 1; i <= this.curPosition; i++) if (minValue > this.array[i]) minValue = this.array[i]; return minValue; } #endregion
再加入一個(gè)計(jì)算所用時(shí)間的類,用來計(jì)算Min/Max函數(shù)所運(yùn)行的時(shí)間
class Timing { Stopwatch tm = new Stopwatch(); public void Start() { GC.Collect(); GC.WaitForPendingFinalizers(); tm.Reset(); tm.Start(); } public void Stop() { tm.Stop(); } public void Display(string msg) { Console.WriteLine(msg + ", 共花費(fèi)了 " + tm.Elapsed.TotalMilliseconds + " 毫秒"); } }
我們先來寫個(gè)最簡(jiǎn)單的,沒有排序功能的demo程序,來看看當(dāng)沒有排序時(shí)的性能:
int count = 19999; CArray aryObj = new CArray(count); Random rnd = new Random(DateTime.Now.Second); for (var i = 0; i < count; i++) aryObj.Insert((int)(rnd.NextDouble() * 100000) + 1); Timing t = new Timing(); t.Start(); aryObj.Min(); t.Stop(); t.Display("排序前Min值");
運(yùn)行結(jié)果:
然后,我們?cè)贋檫@個(gè)CArray編寫一個(gè)排序功能,如下:
public void BubbleSort() { int temp; for (var i = this.curPosition; i >= 1; i--) { for (var j = 0; j <= i-1; j++) { if (this.array[j] > this.array[i]) { temp=this.array[i]; this.array[i] = this.array[j]; this.array[j]=temp; } } } sorted = true;//新增加的一個(gè)私有成員 } public int Min()//修改 { if (sorted) return this.array[0]; int minValue = this.array[0]; for (var i = 1; i <= this.curPosition; i++) if (minValue > this.array[i]) minValue = this.array[i]; return minValue; }
然后修改主程序如下
int count = 19999; CArray aryObj = new CArray(count); Random rnd = new Random(DateTime.Now.Second); for (var i = 0; i < count; i++) aryObj.Insert((int)(rnd.NextDouble() * 100000) + 1); Timing t = new Timing(); t.Start(); aryObj.Min(); t.Stop(); t.Display("排序前Min值"); t.Start(); aryObj.BubbleSort(); t.Stop(); t.Display("冒泡排序"); t.Start(); aryObj.Min(); t.Stop(); t.Display("排序后Min值");
運(yùn)行結(jié)果圖:
Min函數(shù)的執(zhí)行效率在排序前后相差了379倍。
其實(shí)到這里大家都懂了,但是又出現(xiàn)了另外一個(gè)話題:排序函數(shù)怎么花了這么長(zhǎng)時(shí)間?
有人肯定會(huì)說,這些排序算法在C#中都已經(jīng)被ms實(shí)現(xiàn)了,所以沒用!
來自: 昵稱10504424 > 《工作》
0條評(píng)論
發(fā)表
請(qǐng)遵守用戶 評(píng)論公約
Siemens SCL實(shí)現(xiàn)CRC校驗(yàn)程序
FUNCTION_BLOCK FB100TITLE =''CRC_16''AUTHOR : GXWFAMILY : CRCNAME : CRCVERSION : ''1.0''VAR_INP...
var_dump 打印變量相關(guān)的信息
var_dump 打印變量相關(guān)的信息var_dump目 錄。可以比較一下 var_dump() 與 print_r()。3例子例1:$a = array (1, 2, array ("a", "b", "c"));var_dump ($a);array(3) { ...
CArray使用中的問題?請(qǐng)教。。。
我在View類中定義了CArray<int,int>m_plist;編譯出現(xiàn)8個(gè)錯(cuò)誤,主要有: syntax error : missing '';'' before ''<'' error C2501: ''CArray'...
在順序存儲(chǔ)模式下的三種算法
*算法描述:找到負(fù)數(shù)并用臨時(shí)變量存上,先將負(fù)數(shù)之前的所有的數(shù)向后移一位,然后將負(fù)數(shù)放在最前面。int Array = {2,-3,4,-5,6,-7,8,-9,10,-11};//temp1用于存放找到的負(fù)數(shù) if(Array[i]< 0) ...
GO蛋疼的學(xué)習(xí)筆記 | 似水流年
array_flip() 鍵值對(duì)調(diào)
array_flip() 鍵值對(duì)調(diào)。$arr=array(var_dump($arr);var_dump(array_flip($arr));//array(5) { ["a"]=> int(0) ["b"]=> int(1) ["c"]=> int(2) ["d"...
AES加密算法的詳細(xì)介紹與實(shí)現(xiàn)
AES算法實(shí)現(xiàn)AES加密函數(shù)預(yù)覽。*/void aes(char *p, int plen, char *key){ int keylen = strlen(key);/** * 根據(jù)索引,從S盒中獲得元素 ...
MFC集合類
要確定數(shù)組包含元素的個(gè)數(shù),可以調(diào)用數(shù)組的GetSize函數(shù),還可以調(diào)用GetUpperBound返回?cái)?shù)組的上界 下標(biāo),因?yàn)橄聵?biāo)從0開始,所以其值為數(shù)組元素總數(shù)減1。MFC的數(shù)組類為從數(shù)組中刪除元素提供了2個(gè)函數(shù):Re...
flash性能一
flash性能一盡量避免使用try catch1、改進(jìn)算法無論對(duì)于那一種程序,好的算法總是非常重要的,而且能夠極大地提高程序性能,所以任何性能的優(yōu)化第一步就是從算法或者說程序邏輯的優(yōu)化開始,檢查自己的程...
微信掃碼,在手機(jī)上查看選中內(nèi)容