先表態一下, 我不是學資工的, 因為我從小就在摸這些些東西
所以我還頗能夠了解為什麼有那麼多資工系的人會反彈
==== 我是分隔線, 以下是重點 ===
其實補充一點有許多人沒有講到的重點
有人說你會寫字, 但並不代表你會寫詩
這個其實還蠻中肯的, 因為資工有教優化
以下兩個都是做同樣的效果, 都是將數字順序依序排好
但是後者個效率遠比前者大, 這就是所謂演算法帶來的優化
這是資工一生中最追求的東西
// ===============前置準備動作================
// 產生大量的亂數
int a[60000];
for (int i=0, i<60000, i++)
{
a[i]=rand()%60000;
}
// ============版本1-俗稱SelectionSort===============
void SelectionSort(int a[], int array_size)
{
int i;
for (i = 0; i < array_size - 1; ++i)
{
int j, min, temp;
min = i;
for (j = i+1; j < array_size; ++j)
{
if (a[j] < a[min])
min = j;
}
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
// 使用方法: SelectionSort(a, 60000);
// ============版本2-俗稱HeapSort===============
void makeheap ( int x[ ], int n )
{
int i, val, s, f ;
for ( i = 1 ; i < n ; i++ )
{
val = x[i] ;
s = i ;
f = ( s - 1 ) / 2 ;
while ( s > 0 && x[f] < val )
{
x[s] = x[f] ;
s = f ;
f = ( s - 1 ) / 2 ;
}
x[s] = val ;
}
}
void heapsort ( int x[ ], int n )
{
int i, s, f, ivalue ;
for ( i = n - 1 ; i > 0 ; i