JAVA:常用的算法指南

請關注微信公眾號:拾荒的小海螺
博客地址:http://lsk-ww.cn/

1、簡述

在軟件開發過程中,算法扮演著關鍵的角色。它們用于解決各種問題,從數據處理到搜索、排序等。本文將介紹幾種常見的算法及其 Java 實現,包括排序算法、搜索算法以及圖算法。
在這里插入圖片描述

2、排序算法

2.1 冒泡排序(Bubble Sort)

冒泡排序是一種簡單的排序算法。它重復地遍歷待排序的數列,依次比較兩個相鄰的元素,如果它們的順序錯誤就交換它們的位置。遍歷數列的工作重復進行直到沒有相鄰元素需要交換為止。

public class BubbleSort {public static void bubbleSort(int[] arr) {int n = arr.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交換 arr[j] 和 arr[j+1]int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}}public static void main(String[] args) {int[] arr = {64, 34, 25, 12, 22, 11, 90};bubbleSort(arr);System.out.println("排序后的數組:");for (int num : arr) {System.out.print(num + " ");}}
}
2.1 快速排序(Quick Sort)

快速排序是分治法的一種,它通過選擇一個基準元素,將數組分為兩部分,比基準小的元素放在左邊,比基準大的元素放在右邊,然后對這兩部分分別進行遞歸排序。

public class QuickSort {public static void quickSort(int[] arr, int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}}private static int partition(int[] arr, int low, int high) {int pivot = arr[high];int i = (low - 1);for (int j = low; j < high; j++) {if (arr[j] <= pivot) {i++;// 交換 arr[i] 和 arr[j]int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}// 交換 arr[i+1] 和 arr[high]int temp = arr[i + 1];arr[i + 1] = arr[high];arr[high] = temp;return i + 1;}public static void main(String[] args) {int[] arr = {10, 7, 8, 9, 1, 5};quickSort(arr, 0, arr.length - 1);System.out.println("排序后的數組:");for (int num : arr) {System.out.print(num + " ");}}
}

3、搜索算法(二分查找(Binary Search))

二分查找是一種高效的查找算法,適用于已經排序的數組。它通過將數組一分為二,反復縮小查找范圍來找到目標值。

public class BinarySearch {public static int binarySearch(int[] arr, int x) {int low = 0, high = arr.length - 1;while (low <= high) {int mid = low + (high - low) / 2;if (arr[mid] == x)return mid;if (arr[mid] < x)low = mid + 1;elsehigh = mid - 1;}return -1; // 未找到返回 -1}public static void main(String[] args) {int[] arr = {2, 3, 4, 10, 40};int x = 10;int result = binarySearch(arr, x);if (result == -1)System.out.println("元素未找到");elseSystem.out.println("元素在索引 " + result);}
}

4、 圖算法

4.1 深度優先搜索(Depth-First Search, DFS)

深度優先搜索是一種用于遍歷或搜索圖的算法。它從圖的某個起始節點開始,沿著一條路徑走到底,然后回溯,繼續探索新的路徑。

import java.util.*;public class GraphDFS {private int V; // 頂點個數private LinkedList<Integer> adj[]; // 鄰接表GraphDFS(int v) {V = v;adj = new LinkedList[v];for (int i = 0; i < v; ++i)adj[i] = new LinkedList();}void addEdge(int v, int w) {adj[v].add(w); // 添加邊}void DFSUtil(int v, boolean visited[]) {visited[v] = true;System.out.print(v + " ");Iterator<Integer> i = adj[v].listIterator();while (i.hasNext()) {int n = i.next();if (!visited[n])DFSUtil(n, visited);}}void DFS(int v) {boolean visited[] = new boolean[V];DFSUtil(v, visited);}public static void main(String args[]) {GraphDFS g = new GraphDFS(4);g.addEdge(0, 1);g.addEdge(0, 2);g.addEdge(1, 2);g.addEdge(2, 0);g.addEdge(2, 3);g.addEdge(3, 3);System.out.println("從頂點 2 開始的深度優先搜索:");g.DFS(2);}
}
4.2 廣度優先搜索(Breadth-First Search, BFS)

廣度優先搜索是一種用于遍歷或搜索圖的算法。它從圖的某個起始節點開始,首先訪問距離最近的節點,然后逐層向外擴展。

import java.util.*;public class GraphBFS {private int V; // 頂點個數private LinkedList<Integer> adj[]; // 鄰接表GraphBFS(int v) {V = v;adj = new LinkedList[v];for (int i = 0; i < v; ++i)adj[i] = new LinkedList();}void addEdge(int v, int w) {adj[v].add(w); // 添加邊}void BFS(int s) {boolean visited[] = new boolean[V];LinkedList<Integer> queue = new LinkedList<>();visited[s] = true;queue.add(s);while (queue.size() != 0) {s = queue.poll();System.out.print(s + " ");Iterator<Integer> i = adj[s].listIterator();while (i.hasNext()) {int n = i.next();if (!visited[n]) {visited[n] = true;queue.add(n);}}}}public static void main(String args[]) {GraphBFS g = new GraphBFS(4);g.addEdge(0, 1);g.addEdge(0, 2);g.addEdge(1, 2);g.addEdge(2, 0);g.addEdge(2, 3);g.addEdge(3, 3);System.out.println("從頂點 2 開始的廣度優先搜索:");g.BFS(2);}
}

5、總結

本文介紹了幾種常見的算法及其 Java 實現,包括冒泡排序、快速排序、二分查找、深度優先搜索和廣度優先搜索。這些算法在實際開發中非常有用,通過掌握它們,可以解決許多常見的編程問題。希望這篇文章能幫助你更好地理解和使用這些算法。

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

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

相關文章

ffmpeg推流時Unknown encoder ‘libx264‘

如果環境中有conda&#xff0c;最簡單的辦法就是 conda uninstall ffmpeg conda install ffmpeg 或者 sudo apt-get install -y libgmp3-dev pkg-config gnutls-bin libaom-dev libass-dev libbluray-dev libfdk-aac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-…

基于java+springboot+vue實現的農產品直賣平臺(文末源碼+Lw)266

摘 要 計算機網絡發展到現在已經好幾十年了&#xff0c;在理論上面已經有了很豐富的基礎&#xff0c;并且在現實生活中也到處都在使用&#xff0c;可以說&#xff0c;經過幾十年的發展&#xff0c;互聯網技術已經把地域信息的隔閡給消除了&#xff0c;讓整個世界都可以即時通…

Python從0到100(三十三):xpath和lxml類庫

1. 為什么要學習xpath和lxml lxml是一款高性能的 Python HTML/XML 解析器&#xff0c;我們可以利用XPath&#xff0c;來快速的定位特定元素以及獲取節點信息 2. 什么是xpath XPath&#xff0c;全稱為XML Path Language&#xff0c;是一種用于在XML文檔中進行導航和數據提取的…

Python基礎之多進程

文章目錄 1 多進程1.1 簡介1.2 Linux下多進程1.3 multiprocessing1.4 Pool1.5 進程間通信1.6 分布式進程 1 多進程 1.1 簡介 要讓Python程序實現多進程&#xff08;multiprocessing&#xff09;&#xff0c;我們先了解操作系統的相關知識。 Unix/Linux操作系統提供了一個fork…

豆包文科成績超了一本線,為什么理科不行?

卡奧斯智能交互引擎是卡奧斯基于海爾近40年工業生產經驗積累和卡奧斯7年工業互聯網平臺建設的最佳實踐&#xff0c;基于大語言模型和RAG技術&#xff0c;集合海量工業領域生態資源方優質產品和知識服務&#xff0c;旨在通過智能搜索、連續交互&#xff0c;實時生成個性化的內容…

使用Java構建可擴展的微服務架構

使用Java構建可擴展的微服務架構 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討如何使用Java構建可擴展的微服務架構&#xff0c;這是現代軟件開…

Java - 程序員面試筆記記錄 實現 - Part2

2.1 輸入輸出流 流可以被看作一組有序的字節集合&#xff0c;即數據在兩個設備間的傳輸。 字節流&#xff1a;以字節作為單位&#xff0c;讀到一個字節就返回一個字節&#xff1b;InputStream & OutputStream。 字符流&#xff1a;使用字節流讀到一個到多個字節先查詢碼…

【Invalid mapping pattern】SpringMVC路徑匹配

報錯&#xff1a; Description:Invalid mapping pattern detected: /**/{[path:[^.]] ^ No more pattern data allowed after {...} or ** pattern elementAction:Fix this pattern in your application or switch to the legacy parser implementation with spring.mvc.pathm…

VLC for Unity播放RTSP延遲高的解決辦法

VLC for Unity播放RTSP延遲高的解決辦法&#xff1a; 設置網絡緩存時長network-caching100 public void Open(){Log("VLCPlayerExample Open");if (mediaPlayer.Media ! null)mediaPlayer.Media.Dispose();List<string> options new List<string>();o…

Eureka在微服務架構中的服務降級策略解析

引言 微服務架構因其靈活性和可擴展性而受到現代軟件開發的青睞。然而&#xff0c;隨著服務數量的增加&#xff0c;系統的復雜性也隨之上升&#xff0c;服務間的依賴關系可能導致單點故障&#xff0c;影響整個系統的穩定性。服務降級是一種常見的應對策略&#xff0c;用于在服…

基于RabbitMQ的異步消息傳遞:發送與消費

引言 RabbitMQ是一個流行的開源消息代理&#xff0c;用于在分布式系統中實現異步消息傳遞。它基于Erlang語言編寫&#xff0c;具有高可用性和可伸縮性。在本文中&#xff0c;我們將探討如何在Python中使用RabbitMQ進行消息發送和消費。 安裝RabbitMQ 在 Ubuntu 上安裝 Rabbi…

提升寫作效率:探索AI在現代辦公自動化中的應用

工欲善其事&#xff0c;必先利其器。 隨著AI技術與各個行業或細分場景的深度融合&#xff0c;日常工作可使用的AI工具呈現出井噴式發展的趨勢&#xff0c;AI工具的類別也從最初的AI文本生成、AI繪畫工具&#xff0c;逐漸擴展到AI思維導圖工具、AI流程圖工具、AI生成PPT工具、AI…

精通SQL Server端口管理:添加與刪除監聽端口的指南

引言 SQL Server的端口管理是數據庫管理員(DBA)必須掌握的關鍵技能之一。端口配置不僅關系到數據庫的網絡通信能力&#xff0c;還直接影響到數據庫的安全性和性能。本文將詳細介紹如何在SQL Server中添加和刪除監聽端口&#xff0c;以及相關的配置策略和最佳實踐。 SQL Serve…

ubuntu 系統中 使用docker 制作 Windows 系統,從此告別 vmware虛擬機

我的系統是 ubuntu 24 前期準備工作&#xff1a; 安裝dockerdocker pull 或者 手動制作鏡像 docker build 的話 必須要 科學上網&#xff0c; 好像阿里鏡像都下不下來。需要 知道 docker 和docker compose 命令的使用方式 我是給docker 掛了 http代理 如果你能pull下來鏡像 …

springboot健身房管理系統-計算機畢業設計源碼031807

摘 要 大數據時代下&#xff0c;數據呈爆炸式地增長。為了迎合信息化時代的潮流和信息化安全的要求&#xff0c;利用互聯網服務于其他行業&#xff0c;促進生產&#xff0c;已經是成為一種勢不可擋的趨勢。在健身房管理的要求下&#xff0c;開發一款整體式結構的健身房管理系統…

Windows環境使用SpringBoot整合Minio平替OSS

目錄 配置Minio環境 一、下載minio.exe mc.exe 二、設置用戶名和密碼 用管理員模式打開cmd 三、啟動Minio服務器 四、訪問WebUI給的地址 SpringBoot整合Minio 一、配置依賴&#xff0c;application.yml 二、代碼部分 FileVO MinioConfig MinioUploadService MinioController 三…

使用Python繪制太陽系圖

使用Python繪制太陽系圖 太陽系圖太陽系圖的優點使用場景 效果代碼 太陽系圖 太陽系圖&#xff08;Sunburst Chart&#xff09;是一種層次結構圖表&#xff0c;用于表示數據的分層結構。它使用同心圓表示各個層級&#xff0c;中心圓代表最高層級&#xff0c;向外的圓環代表逐級…

CCT技術

概念介紹 多個功能核心的集成可以通過片上系統(SOC)或封裝中系統(SIP)設備的開發來實現。SOC器件將核心集成到單個集成電路中。SIP集成是將多個集成電路組合到單個封裝中。核心數量 的增加可能導致必要的測試人員資源和/或測試時間的增加。這直接影響了與測試這些設備相關的…

CesiumJS【Basic】- #031 繪制虛線(Entity方式)

文章目錄 繪制虛線(Entity方式)1 目標2 代碼2.1 main.ts繪制虛線(Entity方式) 1 目標 使用Entity方式繪制虛線 2 代碼 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer(

SAP實現特別總賬的憑證預制

SAP實現特別總賬的憑證預制 仔細理解只有”其他”的特殊總帳標識才可預制憑證這句話. F-29/f-48不可預制。F-29/f-48預制時出現錯誤消息號 FP 030&#xff0c;提示特殊總帳標志類型“匯票和”預付定金“的特別總帳標志的過帳代碼不能預制&#xff0c;這是系統寫死的&#xff…