[Day7] Selection Sort in Java

思路 反序 先以最左邊為基準點跟右邊依序做比較 把最大的放在最左邊 反覆執行迴圈 實作 測試方法 public static void main(String[] args) { int[] nums = new int[]{8, 2, 6, 10, 4}; Sort_Selection3.selection_sort(nums); System.out.println(); } 具體 public static void selection_sort(int[] nums) { //8,2,6,10,4 // 開始執行 for (int i_start = 0; i_start < nums.length; i_start++) { int i_max = i_start; // 設定開始為最大,i_max=0 // j_run = 設右邊為比較 開始迴圈 // j_run + 1 -> 要跟右邊做比較確保右邊有值 //i_max=0, 8,2,6,10,4 //j_run=0+1=1,nums[1]=2>nums[0]=8,false //j_run=2,nums[2]=6>nums[0]=8,false //j_run=3,nums[3]=10>nums[0]=8,true,i_max=3 //j_run=4,nums[4]=4>nums[3]=10,false //i_max=1, 10,2,6,8,4 //j_run=2,nums[2]=6>nums[1]=2,i_max=2 //j_run=3,nums[3]=8>nums[2]=6,i_max=3 //j_run=4,nums[4]=4>nums[3]=8,false //i_max=2, 10,8,6,2,4 //j_run=3,nums[3]=2>nums[2]=6,false //j_run=4,nums[4]=4>nums[2]=6,false //i_max=3, 10,8,6,2,4 //j_run=4,nums[4]=4>nums[3]=2,i_max=4 for (int j_run = i_start + 1; j_run < nums....

August 8, 2022 Â· 2 min Â· Yish

How do I Work in second-half year of 2022?

2022 年針對去年的工具進行一個全面性的覆盤和審視,目前在工具上做了一些調整, 以下會列出截至目前為止所變更的項目和工具選用以及用途作為一個參考紀錄。 開發 Jetbrains: PHPStorm / IDEA CE / Pycharm CE Remix: Solidity VSCode: 目前主要作為其他語言編輯器,方便跟快速啟動是我選擇原因 Shottr: 圖片編輯器 TablePlus: DBMS massCode: Code snippets manager Alfred: 快速切換 toolbar,有綁定一些 workflow,但主要還是搜尋和計算不需要再額外打開其他應用加快速度 Github light theme for all editors, JetBrains Mono type. 管理 TickTick: 目前還是我生活和工作上的 GTD 管理工具,生活上除了日常待辦事項紀錄外,習慣養成和快速筆記我也是使用這套軟體,這也是為數不多讓我覺得很好用的工具 Trello: 看板進度控制 Jira 知識來源 Youtube Premium: 這個投資也是相當實際,節省掉我大量的等待廣告時間,且上面有許多免費的學習資源很推薦購買 Udemy: 課程購買平台,通常都可以用很實惠的價格買到不錯的課程 微信讀書: 用於閱讀技術書籍跟一些冷門書 硬體 Macbook pro/air M1 -> shifting to new Macbook Windows 11 keychron K3 Logitech G PRO superlight / Master 3 iPhone 13 pro max

August 8, 2022 Â· 1 min Â· Yish

[Day6] Insertion Sort in Java

思路 反序 如果相鄰兩個數字大小相反,就交換位置 最小在右邊,最大在左邊 實作 測試方法 public static void main(String[] args) { int[] nums = new int[]{8, 2, 6, 10, 4}; Sort_Insertion3.insertion_sort(nums); System.out.println(); } 具體 public static void insertion_sort(int[] nums) { // 從 0 開始跑 for (int i_start = 0; i_start < nums.length; i_start++) { // 與開始的前一位做比較,一直往前比較 //0=8,1=2,3=6,4=10,5=4 //i_start=0,j_run=-1 x //i_start=1,j_run=0 in, nums[1]=2, nums[0]=8 break; //i_start=2,j_run=1 in, nums[2]=6, nums[1]=2 swap; [8,6,2,10,4] //i_start=2,j_run=0 in, nums[1]=6, nums[0]=8 break; //i_start=3,j_run=2 in, nums[3]=10, nums[2]=2 swap; [8,6,10,2,4] //i_start=3,j_run=1 in, nums[2]=10, nums[1]=6 swap; [8,10,6,2,4] //i_start=3,j_run=0 in, nums[1]=10, nums[0]=8 swap; [10,8,6,2,4] //i_start=4,j_run=3 in, nums[4]=4, nums[3]=2 swap; [10,8,6,4,2] //i_start=4,j_run=2 in, nums[3]=4, nums[2]=6 break; for (int j_run = i_start - 1; j_run >= 0; j_run--) { // 後面的數字大於前面的數字,就交換位置 if (nums[j_run + 1] > nums[j_run]) { swap(nums,j_run + 1, j_run); } else { // 否則跳出迴圈 break; } } } } private static void swap(int[] nums, int i_left, int i_right) { int tmp = nums[i_left]; // set temp variable nums[i_left] = nums[i_right]; // 把 right 放到 left nums[i_right] = tmp; // 把 left 放到 right } 實作 by recursion 測試方法 public static void main(String[] args) { nums = new int[]{8, 2, 6, 10, 4}; Sort_Insertion3....

August 7, 2022 Â· 2 min Â· Yish

[Day5] Bubble Sort in Java

思路 依序排序大小 如果相鄰兩個數字大小相反,就交換位置 最大在右邊,最小在左邊 實作 測試方法 public static void main(String[] args) { int[] nums = new int[]{8, 2, 6, 10, 4}; // 依序排序 Sort_Bubble3.bubble_sort(nums); // 預期結果:[2, 4, 6, 8, 10] System.out.println(); } 具體 public static void bubble_sort(int[] nums){ for (int round = 0; round < nums.length; round++) { // 從頭開始跑 int len = nums.length; // 總長度 for (int i_run = 1; i_run < len; i_run++) { // nums[0] > nums[1] // nums[1] > nums[2] if (nums[i_run - 1] > nums[i_run]) { swap(nums, i_run - 1, i_run); // 交換 } } } } private static void swap(int[] nums, int i_left, int i_right) { int tmp = nums[i_left]; // set temp variable nums[i_left] = nums[i_right]; // 把 right 放到 left nums[i_right] = tmp; // 把 left 放到 right } 優化 public static void bubble_sort(int[] nums){ for (int round = 0; round < nums....

August 7, 2022 Â· 2 min Â· Yish

[Day4] DFS BFS 理論 in Java

思路 DFS 深度優先搜尋 Depth-First Search BFS 廣度優先搜尋 Breadth-First Search 作用與結合 DFS 通常與 recursion 結合使使用,用於找出最快合格解 BFS 通常與 loop 結合使用,用於找出最佳解 概念代碼 pseudo code DFS func dfs(node) { if (node == 0) return; // 已經執行完 if (target == node) return 'get it'; // 已經找到目標 print 'blue'; dfs(node - 1); // go left print 'green'; dfs(node - 1); // go right print 'red'; } BFS func bfs(node) { queue = new Queue(); queue....

August 6, 2022 Â· 1 min Â· Yish

[Day3] Implements for While in Java

思路 for loop 用的時機 while loop 用的時機 recursion 用的時機 實作 for loop: 用於知道確切迴圈數 int[] nums = new int[]{1,2,3,4,5,6,7}; for (int i = 0; i <= nums.length;i++) { System.out.println(i); } while loop: 用於無法得知確切迴圈數 int winning_number = 777; while(true) { int random_number = (int) (1000 * Math.random()); if (random_number == winning_number) { System.out.println("Congratulation!"); break; } } Recursion: 呼叫自身方法執行 // fibonacci public static Integer fibonacci(int n){ if (n == 0) return 0; // first number if (n == 1) return 1; // second number /** next round **/ return fibonacci(n - 2) + fibonacci(n - 1); } for (int i = 0; i < 20; i++) { System....

August 5, 2022 Â· 1 min Â· Yish