經典算法重點總結

文章目錄

    • 排序算法
      • 冒泡排序
      • 直接插入排序
      • 希爾排序
      • 直接選擇排序
      • 快速排序
      • 堆排序
      • 歸并排序
      • 總結
    • 查找算法
      • 順序查找
      • 二分查找
      • 插值查找
      • 斐波那契查找
      • 樹表查找
      • 分塊查找
      • 哈希查找
      • 總結

排序算法

冒泡排序

void bubbleSort(int a[] , int n){for(int i = n-1 ; i > 0 ; i--){for(int j = 0 ; j < i ; j++){if(a[j] < a[j - 1]){  swap(a[j - 1],a[j]);printArr(a,n);}}}
} 

直接插入排序

void straightInsertionSort(int a[] , int n){int tempCout = 0;//a[j] > a[j + gap]換成a[j] < a[j + 1]for(int i = 1 ; i < n ; i++){ for(int j = i-1 ; j >= 0 && a[j]>a[j+1] ; j-- ){ swap(a[j],a[j+1]); //交換2個數 tempCout++;}printArr(a , n);  //打印數字}
}

希爾排序

void shellSort(int a[] , int n){int i ,j , gap;  //gap為分組的大小,此處采用二分法for(gap = n/2 ; gap > 0 ; gap /= 2){  //遍歷每個分組for(i = gap ; i< n ; i += gap){//將a[j] > a[j + gap]換成a[j] < a[j + gap]for( j = i - gap ; j>=0 && a[j] > a[j + gap] ; j -= gap){  swap(a[j] , a[j + gap]);}printArr(a , n);}}
}

直接選擇排序

void straightSelectSort(int a[] , int n){int i , j , minIndex;for(i = 0 ; i < n ; i++){minIndex = i;for(j = i + 1; j < n ; j++){a[j] > a[minIndex]if(a[j] < a[minIndex]){minIndex = j;    }    }swap(a[i] , a[minIndex]); printArr(a , n);        }    
}

快速排序

void quickSort(int a[] , int L , int R){if(L < R){int i=L , j = R , temp = a[i];while(i<j){//從右向左找尋小于基準值a[i]的元素while(i<j && a[j] >= temp){j--;} if(i < j){a[i++] = a[j]; //將小于基準值的元素插入到a[i],同時i指針進一 }//從左向右找尋大于基準值a[i]的元素while(i<j && a[i] < temp){i ++;} if(i < j){a[j--] = a[i];  // 將大于基準值的元素插入到a[j] , 同時j指針減一 }}a[i] = temp;quickSort(a , L, i-1); //對左邊元素遞歸 quickSort(a , i+1, R); //對右邊元素遞歸 printArr(a , R - L + 1);  //要注意數組的長度是R-L+1而不是R-L,因為數組是從0開始的    }        
} 

堆排序

歸并排序

void mergeArr(int a[] , int left , int mid , int right, int temp[]){int i = left , j = mid + 1; //左邊有序的列表 int m = mid , n = right; //右邊有序的列表 int k = 0; //用于歸并后數組的指引while(i<=m && j<=n){if(a[i] < a[j]){  //比較左邊數組和右邊數組之間的大小 temp[k++] = a[i++];  //將左邊數組小的元素放置于臨時數組中,同時數組指針加一 }else{temp[k++] = a[j++]; //將右邊數組中小的元素放置于臨時數組中,同時數組指針加一 } } //將左邊數組中剩下的數組元素加入到temp數組中while(i<=m){temp[k++] = a[i++];//加入元素,同時數組的指針加一 } //將右邊的數組中剩下的元素加入到temp數組中while(j<=n){temp[k++] = a[j++];//加入元素,同時數組的指針加一} //將歸并后的有序數組復制拷貝到原數組a中 for(i=0;i<k;i++){a[left + i] = temp[i];} printArr(a , right - left + 1);//打印數組 
}
void mergeSort(int a[] , int left , int right , int temp[]){if(left < right){int mid = (left + right) / 2 ;mergeSort(a , left , mid , temp); //左邊遞歸mergeSort(a , mid + 1 , right , temp); //右邊遞歸mergeArr(a , left , mid , right , temp);//合并排序好的數組        } 
}

總結

è??é?????????‰????è?°

查找算法

順序查找

int SequenceSearch(int a[], int value, int n)
{int i;for(i=0; i<n; i++)if(a[i]==value)return i;return -1;
}

二分查找

int binSearch(int a[] , int val , int len){int start = 0 , mid = 0;int end = len - 1;while(start<=end){mid = (start + end)/2;  //計算中點位置if(val == a[mid] ){return mid;}else if(val < a[mid]){end = mid - 1;}else if(val > a[mid]){start = mid + 1;}}return -1;
}int binSearch_1(int a[] , int val , int start , int end){if(start > end){  //查詢不到的時候返回-1return -1;}int mid = (end + start) / 2;  //計算中點位置if(val == a[mid]){return mid;}else if(val < a[mid]){return binSearch_1(a , val , start , mid - 1);}else if(val > a[mid]){return binSearch_1(a , val , mid + 1 , end);}        
}

插值查找


int insertSearch(int a[] , int val , int low , int high){//正常情況下 while(low <= high){int mid = low + (val-a[low])/(a[high]-a[low])*(high-low); //相比于二分查找改進的地方 if(val == a[mid]){return mid;}else if(val < a[mid]){high = mid -1;}else if(val > a[mid]){low = mid + 1;}}return -1; 
} 

斐波那契查找

樹表查找


平衡查找樹,二叉查找樹,紅黑樹,b樹,b+樹,

分塊查找

哈希查找

總結

search method efficient conclusion

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445277.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445277.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445277.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python(18)-字典dictionary、集合

Python高級數據類型-字典1.字典的定義2.字典的基本操作:查詢&#xff0c;增加&#xff0c;修改&#xff0c;獲取3.字典的統計、合并、清空4.字典的循環遍歷5.返回最大“值”對應的“鍵”6.應用場景pop(key)7.集合字典是除了列表之外最靈活的數據類型&#xff0c;用來描述一個物…

redis——Redis中的LRU算法改進

redis通常使用緩存&#xff0c;是使用一種固定最大內存的使用。當數據達到可使用的最大固定內存時&#xff0c;我們需要通過移除老數據來獲取空間。redis作為緩存是否有效的重要標志是如何尋找一種好的策略&#xff1a;刪除即將需要使用的數據是一種糟糕的策略&#xff0c;而刪…

redis——HyperLogLog

HyperLogLog 是一種概率數據結構&#xff0c;用來估算數據的基數。數據集可以是網站訪客的 IP 地址&#xff0c;E-mail 郵箱或者用戶 ID。 基數就是指一個集合中不同值的數目&#xff0c;比如 a, b, c, d 的基數就是 4&#xff0c;a, b, c, d, a 的基數還是 4。雖然 a 出現兩次…

機器學習知識總結系列-機器學習中的優化算法總結(1-4)

文章目錄1.梯度下降1.1批量梯度下降(BGD)1.2隨機梯度下降&#xff08;SGD&#xff09;1.3 小批量隨機梯度下降&#xff08;MSGD&#xff09;1.4 比較&#xff1a;1.5 動量算法&#xff08;momentum&#xff09;1.6 Nestrov Momentum2. 自適應方法2.1 自適應學習率算法&#xff…

Python(19)-字符串、Unicode字符串

高級數據類型--字符串、Unicode字符串1.字符串的定義2.字符串的長度、計數、Index3.字符串常用方法3.1判斷類型3.2查找和替換3.3文本對齊3.4去除空白字符.strip()4.字符串的拆分和拼接5.字符串的切片6.跨行字符串7.包含轉義字符r8.字符串的分割與連接9.Unicode字符串字符串-不變…

機器學習中的距離和損失函數

文章目錄13.1 距離度量13.2 損失函數13.1 距離度量 距離函數種類&#xff1a;歐式距離、曼哈頓距離、明式距離&#xff08;閔可夫斯基距離&#xff09;、馬氏距離、切比雪夫距離、標準化歐式距離、漢明距離、夾角余弦等常用距離函數&#xff1a;歐式距離、馬氏距離、曼哈頓距離…

Python(20)-高級數據類型的公共方法

高級數據類型的公共方法1內置函數2高級數據類型切片3運算符&#xff0c;*&#xff0c;in4完整的for循環公共方法是列表&#xff0c;元組&#xff0c;字典&#xff0c;字符串都能使用的方法1內置函數 內置函數&#xff1a;不需要import導入模塊&#xff0c;就可以直接使用的函數…

redis——為什么選擇了跳表而不是紅黑樹?

跳表是個啥東西請看這個文章。 我們知道&#xff0c;節點插入時隨機出一個層數&#xff0c;僅僅依靠一個簡單的隨機數操作而構建出來的多層鏈表結構&#xff0c;能保證它有一個良好的查找性能嗎&#xff1f;為了回答這個疑問&#xff0c;我們需要分析skiplist的統計性能。 在…

機器學習公式推導

文章目錄線性回歸邏輯回歸線性判別分析PCAk-means決策樹svm隨機深林GBDTxgboost強化學習MapReduce線性回歸 邏輯回歸 對于分類問題&#xff1a;輸出0/1&#xff0c;超過[0,1]沒有意義&#xff0c;使用sigmoid函數 **代價函數&#xff1a;**使用L2平方差&#xff0c;由于模型函…

Python綜合應用(1)--名片管理系統開發

第一個綜合應用-名片管理系統1框架搭建2完善功能綜合應用&#xff0c;名片管理系統 歡迎界面&#xff0c;不同選項&#xff0c;1.新建名片&#xff0c;2.顯示全部&#xff0c;3 查詢名片&#xff08;查到之后可以修改名片信息&#xff09;&#xff0c;0 退出系統 程序開發流程…

springboot1——spring相關入門

spring 隨著我們開發&#xff0c;發現了一個問題&#xff1a; A---->B---->C---->D 在A中創建B的對象調用B的資源 在B中創建C的對象調用C的資源 在C中創建D的對象調用…

大數據學習(06)-- 云數據庫

文章目錄目錄1.什么是云數據庫&#xff1f;1.1 云計算和云數據庫的關系1.2 云數據庫的概念1.3 云數據庫的特性1.4 云數據庫應用場景1.5 云數據庫和其他數據的關系2.云數據庫產品有哪些&#xff1f;2.1 云數據庫廠商概述2.2 亞馬遜云數據庫產品2.3 Google云數據庫產品2.4 微軟云…

Python(21)--變量進階

變量的進階使用1變量引用2可變、不可變數據類型3局部變量和全局變量4.Tips本系列博文來自學習《Python基礎視頻教程》筆記整理&#xff0c;視屏教程連接地址&#xff1a;http://yun.itheima.com/course/273.html在博文&#xff1a;https://blog.csdn.net/sinat_40624829/articl…

HTTP 響應代碼全集

HTTP 響應狀態代碼指示特定 http 請求是否已成功完成。響應分為五類&#xff1a;信息響應(100–199)&#xff0c;成功響應(200–299)&#xff0c;重定向(300–399)&#xff0c;客戶端錯誤(400–499)和服務器錯誤 (500–599)。狀態代碼由 section 10 of RFC 2616定義 信息響應 …

機器學習知識總結系列-機器學習中的數學-矩陣(1-3-2)

矩陣 SVD 矩陣的乘法狀態轉移矩陣狀態轉移矩陣特征值和特征向量 對稱陣 正交陣 正定陣數據白化矩陣求導 向量對向量求導 標量對向量求導 標量對矩陣求導一.矩陣1.1 SVD奇異值分解&#xff08;Singular Value Decomposition&#xff09;&#xff0c;假設A是一個mn階矩陣&#xf…

阿里Java編程規約(注釋)提煉

【強制】類、類屬性、類方法的注釋必須使用 Javadoc 規范&#xff0c;使用/**內容*/格式&#xff0c;不得使用 // xxx 方式。 說明&#xff1a;在 IDE 編輯窗口中&#xff0c;Javadoc 方式會提示相關注釋&#xff0c;生成 Javadoc 可以正確輸出相應注釋&#xff1b;在 IDE 中…

Python面試題-交換兩個數字的三種方法

Python實現兩個數字交換解法1解法2解法3a6 b100 解法1 使用其他變量&#xff0c;最通用的方法 ca ab bc 解法2 不使用其他變量,利算法節省內存空間 aab ba-b aa-b 解法3 python 專有 a,b(b,a) #等號右邊是一個元組 或者可以寫為&#xff1a; a,bb,a print(a,b)

面試中海量數據處理總結

教你如何迅速秒殺掉&#xff1a;99%的海量數據處理面試題 前言 一般而言&#xff0c;標題含有“秒殺”&#xff0c;“99%”&#xff0c;“史上最全/最強”等詞匯的往往都脫不了嘩眾取寵之嫌&#xff0c;但進一步來講&#xff0c;如果讀者讀罷此文&#xff0c;卻無任何收獲&…

redis——舊版復制

Redis 的復制功能分為同步&#xff08;sync&#xff09;和命令傳播&#xff08;command propagate&#xff09;兩個操作&#xff1a; 同步操作用于將從服務器的數據庫狀態更新至主服務器當前所處的數據庫狀態。命令傳播操作用于在主服務器的數據庫狀態被修改&#xff0c; 導致…

Linux(3)-網-ifconfig,ping,ssh

終端命令網-ping,ssh1. ifconfig -a2. ping3. ssh3.1安裝3.2 連接3.3 配置登入別名防火墻端口號,todo1. ifconfig -a 查看IP地址&#xff0c; 還可以用于配置網口。 ifconfig -a 2. ping ping命令&#xff1a; 檢測到IP地址的連接是否正常。命令開始后由本機發送數據包a&…