using namespace std; template <typename T> //模版函數(泛型) /* 選擇排序 **/ void selectionSort ( T arr[] , int n ){ // 10, 39, 8, 7, 6, 5, 4, 3, 2, 1 //先取出最小的值 而後交換 for ( int i = 0 ; i < n ; i ++ ){ int minIndex = i; for ( int j = i + 1 ; j < n ; j ++ ){ if( arr[j] < arr[minIndex]){ minIndex = j; } } swap( arr[i] , arr[minIndex] ); //交換函數 } } /* 插入排序 **/ template <typename T> //模版函數(泛型) void insertSort (T arr[] , int n ){ // 10, 39, 8, 7, 6, 5, 4, 3, 2, 1 //取出第二個值,和第一個值交換, //取出第三個值,和第二個值交換,和第一個值交換 for ( int i = 1 ; i < n ; i ++ ){ for( int j = i ; j > 0 ; j -- ){ if( arr[j] < arr[j-1]){ swap( arr[j] , arr[j-1] ); }else{ break; } } } } /* 優化插入排序 **/ template <typename T> //模版函數(泛型) void insertOptimizeSort (T arr[] , int n ){ // 10, 39, 8, 7, 6, 5, 4, 3, 2, 1 //取出第二個值,拷貝一份,而後和第一個值比較,若是大把第一個值移 //取出第三個值,拷貝一份,而後和第二個值比較,若是大把第二個值移,而後和第一個值比較 for ( int i = 1 ; i < n ; i ++ ){ T e = arr[i]; int j; for(j = i ; j > 0 ; j -- ){ if( arr[j-1] >e){ arr[j] = arr[j-1]; }else{ break; } } arr[j] = e; } } /* 冒泡排序 **/ template <typename T> //模版函數(泛型) void bubblingSor(T arr[] , int n){ //取出第一個數和第二個數比較,若是第一個數大進行交換,一直比較到把最大的數字放到末端 //從新第一步的比較,這樣循環比較 //第一個循環把最大的數字放到末端,二次循環把比最大的數小的第二位放到倒數第二位 依次 for( int i = 0 ; i < n ; i ++ ){ for( int j = 0 ; j < n ; j ++){ if(arr[i] < arr[j]){ swap(arr[i], arr[j]); } } } } /* 優化冒泡排序 **/ template <typename T> //模版函數(泛型) void bubblingOptimizeSor(T arr[] , int n){ bool swappedn; do { swappedn = false; for( int i = 1; i < n ; i ++ ){ if( arr[i-1] > arr[i] ){ swap(arr[i-1], arr[i]); swappedn = true; } } n --; } while (swappedn); }
週末看了會視頻,發現講的很好,因此就記在博客上,基本也都理解,算法我認爲是一種解題的思路,以前學習高數的時候,都是聯想到世紀狀況去解決,基本學起來不是特別困難,好幾年沒有練習,基本忘記過了,複習一下,基本還能夠回來,因此看完一篇文章或者認爲好的東西都要作筆記,這樣總有一天本身的技能樹會愈來愈廣,一個很簡單的例子,問你簡單的東西實現,1天也能夠繼續實現,1周也能夠,我我的認爲是一週,這一週須要仔細認真想想最優的方案,最優的方案我的認爲,是場景和本身能力價值最大的體現。本身的能力價值是須要一個思考,這個週期在5天,是最美的,基本都這樣算法