iOS 基本算法

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天,是最美的,基本都這樣算法

相關文章
相關標籤/搜索