發表文章

目前顯示的是有「程式語言」標籤的文章

Sorting Algorithm 排序演算法介紹

前言 在本部落格的文章: Python 排序演算法範例 ( Sorting Algorithms in Python ) 有介紹一些常見的四種排序演算法:插入排序、選擇排序、合併排序、氣泡排序。除了這四種之外還有其他的嗎? 當然有!!! 1. 什麼是排序演算法?(排序在做什麼) 排序(Sorting)是指將一組資料(元素)依照 特定的規則 重新排列組合。 日常生活中: 例如將考卷依分數「由低到高」排列,或是將包裹依體積「由大到小」放置。 電腦科學中: 排序是資訊處理的核心基礎。主要是將資料依照「數值大小」(如整數、浮點數)或「字典順序」(如英文字母 A~Z、中文編碼)進行排列。 2. 為什麼會有這麼多種排序演算法? 既然目的都是為了「排好資料」,為什麼科學家要發明幾十種不同的方法?主要原因在於「沒有任何一種演算法在所有情境下都是完美的」。選擇演算法時通常會考量以下關鍵因素: 資料量的大小: 有些演算法(如氣泡排序、選擇排序)程式碼非常簡單,在資料量極小(例如 10 筆資料)時效率很高;但當資料量極大(例如 100 萬筆資料)時,計算時間會暴增,這時就必須使用高效能的演算法(如快速排序、合併排序)。 時間複雜度(計算量): 評估演算法執行速度的指標。例如: 平方時間複雜度 $O(n^2)$ :資料量增加 10 倍,執行時間可能增加 100 倍(如氣泡、選擇、插入排序)。 線性對數時間複雜度 $O(n \log n)$ :效能較佳,適合處理大數據(如快速、合併、堆積排序)。 資料的實際分佈狀況: 資料是已經「幾乎排好」還是「完全混亂」? 例如: 插入排序法 在面對「幾乎已經排好」的資料時,速度非常快。 空間複雜度(記憶體佔用): 有些演算法在排序過程中需要額外的記憶體空間來暫存資料(如合併排序),在記憶體受限的嵌入式系統中就需要謹慎使用。 穩定性(Stability): 如果資料中有兩個數值相同的元素,排序後它們的相對前後順序是否會改變?這在某些商用資料處理中非常重要。 3. 常見的排序演算法分類 根據文中提及的演算法,我們可以依據其運作原理(比較式 vs 非比較式)來分類: 核心分類:比較式排序 (Comparison-based) 這類演算法是透過「兩兩比較資料的大小」來決定順序,也是最常見的類型。 基礎四種(文中提及 Python ...

程式競程入門:基本輸入與輸出

此篇文章是以 C/C++ 程式語言做為程式競程中,資料的輸入與輸出來示範的。 在程式競賽(APCS、ZeroJudge、UVa Online Judge)中,最重要的第一步就是學會如何讀取輸入資料(Input)以及輸出答案(Output)。 一、C++語言的輸入與輸出 C++ 主要使用 iostream 標頭檔中的 cin 與 cout。在競程中,為了提升 standard I/O 的效能,通常會在 main() 函式開頭加上「I/O 優化」程式碼。 輸出(Output) C++使用 cout  與運算子 << 將資料顯示在螢幕上。 基本語法 cout << "要輸出的文字內容" ; cout << variableName; 範例 # include <iostream> using namespace std; int main () { int x = 33 ; cout << "變數x的數值為:" << x; return 0 ; } 執行結果: 變數x的數值為:33 輸出多個資料 string name = "Tom" ; int age = 18 ; cout << "姓名:" << name << " 年齡:" << age; 輸出結果: 姓名:Tom 年齡:18 換行 cout << "第一行" << endl; cout << "第二行" << endl; 或 cout << "第一行\n" ; cout << "第二行\n" ; 輸入(Input) C++使用 cin  與運算子 >> 從標準輸入讀取資料。 基本語法 cin >> variableName; 範例 # include <iostream> using namespace std;...

線上程式競賽懶人包

2026.06.25 更新 底下為筆者所整理的線上程式競賽活動: 國內 高中生解題系統   https://zerojudge.tw/ 特色: 台灣使用人數最多的 OJ 平台 收錄 APCS、TOI、NPSC、UVa 題目 支援 C、C++、Java、Python 題目數量超過數千題 適合從零開始學習程式設計與競賽訓練 推薦程度:★★★★★ 一中電腦資訊研究社解題系統  https://judge.tcirc.tw/ 特色: 支援超過 50 種程式語言 收錄 AP325 題庫 新手介面友善 適合 APCS 與校內競賽訓練 推薦程度:★★★★☆ 建國中學解題系統  https://tioj.ck.tp.edu.tw/ 特色: 台灣資訊奧林匹亞(TOI)常用平台 題目偏向演算法與資料結構 適合培養國手選拔實力 比 ZeroJudge 更具挑戰性 推薦程度:★★★★★ 「AI 程式煉鋒吧」 https://adl.edu.tw/ForgeInCoding 特色 AI 提示系統 :結合 GPT 大型語言模型,在學生卡關時給予引導與撰寫方向提示。 多元程式語言 :平台主要支援 C、C++、Python 等主流檢定語言。 檢定實戰題庫 :內建齊全的 APCS(大學程式設計先修檢測) 實戰題庫與自學課程。 定期解題活動 :提供每週解題挑戰與每日一題,讓練習融入日常生活。 教師教學後台 :老師免註冊即可透過因材網帳號快速登入,能運用已有教材生成專屬題目,並追蹤學生的學習成效。 推薦程度:★★★★★ 景美女中程式解題系統 https://jmj.cmgsh.tp.edu.tw/ 建國中學解題系統  https://tioj.ck.tp.edu.tw/ 資訊之芽解題系統  https://neoj.sprout.tw/ 大學程式能力檢定  https://cpe.cse.nsysu.edu.tw/ 程式設計新手可以先從一中電腦資訊研究社解題系統基礎題庫 https://judge.tcirc.tw/Problems?tabid=BASIC#tab01 或是景美女中程式解題系統高一資訊科技題庫 https://jmj.cmgsh.tp.edu.tw/Problems?...

C/C++ 程式語言 main 函數參數的用途說明

圖片
在 Windows 系統下可以使用system搭配 MS-DOS 的 color 指令(可參考此篇文章  更改 命令提示字元 Command Prompt (cmd) 的顯示顏色  )與 cls 來達成文字顏色的動畫。 color 指令示範影片: 此 color 指令後面的十六位數字是此 color 程式指令的參數,在 C/C++ 程式語言中可以使用 main(int argc, char *argv[]) 內的 argc 與 argv 來達成類似像color 這個擁有執行檔指令參數的功能。  程式碼如下: #include <iostream> using namespace std ; int main ( int argc , char* argv []) {       cout << "程式執行檔參數個數:" << argc << endl ;     for ( int i = 0 ; i < argc ; i ++ )         cout << "第[" << ( i + 1 ) << "]個參數為" << argv [ i ] << endl ;     return 0 ; } 筆者使用 VS Code 與 MinGW-w64 toolchain  來執行此程式碼,檔名為 1.cpp,編譯後會產生 1.exe 執行檔,執行結果如下: 此時開啟 Terminal 輸入指令: 1.exe one two three 可看到如下結果: 當輸入 1.exe one two three 給 1.exe 時, main 的 argc 會存放 4 這個數字,而 argv[] 的內容如下:     argv [ 0 ]: "1.exe"     argv [ 1 ]: "one"     argv [ 2 ]: "two"     argv [ 3 ]: "thre...