--- title: 訓練場_4程式繳交處 tags: 訓練場_st --- > [訓練場_4 題目](https://hackmd.io/@futurenest/code_training_4) > [程式線上編譯環境](https://replit.com/) :::warning 繳交規範(可以複製這裡的喔) `### 自己名字` `#### 題目一` ```python 程式碼 ``` `#### 題目二` ```c++ 程式碼 ``` ::: ### 示範 (1) ```python def sequential_search(data, key): for i in range(len(data)): if key == data[i]: return i return -1 data = [40, 30, 20, 80, 60, 10, 50] key = 60 print("原始資料:{}".format(data)) ret = sequential_search(data, key) if ret == -1: print('找不到 {} QQ'.format(key)) else: print('找到 {} 索引值為:{}'.format(key, str(ret))) ``` ```cpp #include <iostream> using namespace std; /* 學習: - 函式宣告 - 將陣列用指標方式傳送 */ void printArray(int*, int); int sequentialSearch(int*, int, int); int main() { int data [] = { 40, 30, 20, 80, 60, 10, 50 }; int dataLength = (sizeof(data)/sizeof(*data)); int key = 60; cout << "原始資料: "; printArray(data, dataLength); int ret = sequentialSearch(data, dataLength, key); if (ret == -1) cout << "找不到 " << key << " QQ" << endl; else cout << "找到 " << key << " 索引值為 " << ret << endl; } int sequentialSearch(int* data, int length, int key) { for (int i = 0; i < length; i++) if (key == data[i]) return i; return -1; } void printArray(int* data, int length) { cout << "["; for (int i = 0; i < length; i++) { cout << data[i]; if (i != length-1) cout << ", "; } cout << "]" << endl; } ``` ### 示範 (2) ```python def binary_search(data, key): low = 0 high = len(data)-1 while low <= high: mid = int((low + high) / 2) if key == data[mid]: return mid elif key > data[mid]: low = mid + 1 else: high = mid - 1 return -1 data = [40, 30, 20, 80, 60, 10, 50] key = 60 data.sort() print("排序後的資料:{}".format(data)) ret = binary_search(data, key) if ret == -1: print('找不到 {} QQ'.format(key)) else: print('找到 {} 索引值為:{}'.format(key, str(ret))) ``` ```cpp #include <iostream> #include <string> #include <vector> using namespace std; /************************************************* 學習: - array <=> vector - sorting operator funciton *************************************************/ void printArray(int*, int); int binarySearch(int*, int, int); /* sorting operator funciton 若 true: i 會放在 j 前面 */ bool sortingASC (int i, int j) { return i<j; } bool sortingDESC (int i, int j) { return i>j; } int main() { int data [] = { 40, 30, 20, 80, 60, 10, 50 }; int dataLength = (sizeof(data)/sizeof(*data)); std::vector<int> dataVector (data, data + dataLength); int key = 60; cout << "排序後的資料:"; std::sort (dataVector.begin(), dataVector.end(), sortingASC); int* sortedData = &dataVector[0]; printArray(sortedData, dataLength); int ret = binarySearch(sortedData, dataLength, key); if (ret == -1) cout << "找不到 " << key << " QQ" << endl; else cout << "找到 " << key << " 索引值為 " << ret << endl; } int binarySearch(int* data, int length, int key) { int low = 0; int high = length - 1; while (low <= high) { int mid = int((low + high) / 2); if (key == data[mid]) return mid; else if (key > data[mid]) low = mid + 1; else high = mid - 1; } return -1; } void printArray(int* data, int length) { cout << "["; for (int i = 0; i < length; i++) { cout << data[i]; if (i != length-1) cout << ", "; } cout << "]" << endl; } ```