DSAA 第一章 引論

2022-02-15 02:16:57 字數 2699 閱讀 2770

練習(p12)

1.1

/*

* date: 2016-01-14

* question: 編寫乙個程式解決選擇問題,令 k = n/2。

*/#include // use rand () and srand () 動態生成陣列

#include #include // use bool

#include // use clock () 計時 use time () 作為 seed

#define maxlength 500000

void bubble_sort (int a, int length);

void insert_sort (int a, int length);

void fun1 (int a, int length); // 方法1

void fun2 (int a, int length); // 方法2

void print_array (int a, int length); // 列印輸出陣列

int main (void)

// printf ("the array generated is:\n");

// print_array (a, n);

start = clock();

fun1 (a, n); // 第一種方法,用冒泡法排序。

// fun2 (a, n); // 第二種方法,利用到了插入排序

finish = clock();

printf ("cpu time used %.2f ms\n", 1000 * (double) (finish - start) / clocks_per_sec); // 以毫秒計

printf ("how many numbers you want to analysis?(q to quit)\n"); }

return 0;

} // 方法一 利用氣泡排序

void fun1 (int a, int length)

// bubble sort max to min

void bubble_sort (int a, int length)

} if (!swap)

break;

} return;

}// 第二種方法 利用插入排序

void fun2 (int a, int length)

insert_sort (b, length / 2);

// printf ("array b:\n");

// print_array (b, length / 2);

// 開始向 b 中插入剩下的 a 中元素 思想與插入排序類似,只是注意對於 b 中 最後乙個元素的處理。要用倒數第二個去覆蓋,而不用後移。

for (i = length / 2; i < length; i++)

else

break;

} if (j >= 0)

b[j+1] = a[i];

else

b[0] = a[i];

}// printf ("now the array is:\n");

// print_array (b, length/2);

printf ("the %dth big number is %d\n", length/2, a[length / 2 - 1]);

}// 插入排序 下標從0開始,與之前所學有略微差別。

void insert_sort (int a, int length)

if (j >= 0)

a[j+1] = temp;

else // j < 0 即 j = -1 說明 temp > b[0]

a[0] = temp; }}

// 列印整型陣列

void print_array (int a, int length)

/*when i use fun1 to do this, the time(ms) table :

n: 100 1000 2000 4000 10000 15000 20000 30000 40000 50000

t: 0.18 9.13 35.30 103.27 370.25 800.65 1373.49 3013.20 5324.30 8325.52

n: 60000 70000 80000 90000 100000

t: 12301.9 16343.7 22047.7 29176.4 33550.90

when i use fun1 to do this, the time table :

n: 100 1000 2000 4000 10000 15000 20000 30000 40000 50000

t: 0.06 0.35 0.94 3.25 18.54 39.57 61.20 110.23 161.23 215.09

n: 60000 70000 80000 90000 100000

t: 271.17 358.10 411.38 490.30 600.65

可見,方法二比方法一好很多,當然,作者說還有更好的方法,拭目以待

*/

第一章 引論

起源與背景 參考書如下 起源 上世紀初丹麥數學家erlang,在用隨機過程理論研究 網的過程中,建立起的一套理論系統。所以,排隊論是一門古老而又年青的理論。發展 二戰之後,排隊理論與稍後發展起來的數學規劃 決策論等共同構成了運籌學。在計算機系統結構和計算機網路領域中的應用起始於上世紀七十年代。排隊問...

第一章 引論總結

個人目前觀點,這本書的意義在於,實現乙個功能是必要的,實現乙個高效能的功能也是非常重要的,在大量輸入下,如果解決不了效能問題,那麼 正確 的程式也會變成錯誤的 幾個指數公式 注意 在電腦科學中,除非有特別的說明,否則所有的對數都是以2為底的。對數的定義 x ax a xa b 當且僅當log x b...

編譯原理 第一章 引論

一,語言處理器 1 乙個整合的軟體開發環境,其中包括很多種類的語言處理器,比如編譯器 直譯器 彙編器 聯結器 載入器 偵錯程式以及程式概要提取工具。2 編譯器 把源程式的每一條語句都編譯成機器語言,並儲存成二進位制檔案,這樣執行時計算機可以直接以機器語言來執行此程式,速度很快 包括編譯器,反編譯器,...