【八大排序】java版(上)(冒泡、快排、堆排、選擇排序)

文章目錄

  • 一、冒泡排序(重點)
    • 思路
    • 代碼
  • 二、快排(面試重點)
    • 思路
    • 代碼
  • 三、堆排序(面試重點)
    • 思路
    • 代碼
  • 四、選擇排序
    • 思路
    • 代碼

一、冒泡排序(重點)

思路

前后兩兩數據進行比較,小的數據往前走,大的數據往后走,每一輪結束之后,最大的數據到達正確位置

代碼

public static void main(String[] args) {int[] arr={1,5,3,6,22,0,2,5};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr){for(int j =0;j<arr.length;j++){for(int i =0;i<arr.length-j-1;i++){if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}}}

二、快排(面試重點)

思路

1.定義待排序數組當中的第一個作為基準數
2.游標 j 從后往前查找比基準數小的,查找到第一個比基準數小的數停下
3.定義游標i 從前往后查找第一個比基準數大的值停下
4.i 和 j 進行交換
5.重復2,3,4,直到i 和 j 相遇
6.基準數和相遇位置進行交換,基準數到達正確位置
7.以基準數為起始點,分成左右兩部分,重復上述所有 直到數據都被拆分開為止

代碼

public static void quicksort(int[] arr,int left,int right){if(left>=right){return ;}int base = arr[left];int i =left;int j = right;while(i !=j ){//j從后往前走,找比基數小的值while(arr[j] >=base && i<j){j--;}//i從前往后走,找比基數小的值while (arr[i] <= base && i<j){i++;}int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}//當i==j時arr[left] = arr[i];arr[i] = base;quicksort(arr,left,i-1);quicksort(arr,i+1,right);}

三、堆排序(面試重點)

思路

1.利用完全二叉樹構建大頂堆
2.堆頂元素和堆底元素進行互換,除堆底元素之外剩余元素繼續構建大頂堆
3.重復2

arr[i]的 左孩子arr[2i+1]
arr[i]的 右孩子arr[2i+2]
arr[i]的 父親arr[(i-1)/2]

arr[i]>arr[2i+1] && arr[i]>arr[2i+2]
完全二叉樹:數據從上到下 從左到右
大頂堆:父節點的值大于或等于其左右孩子的值

構建大頂堆
一、從后往前檢測節點是否符合大頂堆的要求,如果符合向前檢查,不符合對當前節點進行調整
1.parent指向當前節點
2.定義parent的左孩子 child(有孩子一定有左孩子)
3.判斷parent的右孩子 如果有右孩子,左右孩子進行比較 child指向左右孩子的最大值
4.父子節點進行比較,如果 父節點值大,符合大頂堆,繼續向前檢查
5.如果子節點的值大,父子節點進行交換,parent指向child,child指向其左右孩子的最大值,繼續將父子節點進行比較
6.直到父節點值大或者child為空

二、維護堆頂
parent指向 堆頂,child指向其左右孩子的最大值
父子節點進行比較,如果父節點值大,大頂堆構建完成
如果父節點值小,父子節點交換

代碼

 public static void main(String[] args) {int[] arr={1,5,3,6,22,0,2,5};for(int i = arr.length-1;i>=0;i--){adjust(arr,i, arr.length);}for (int i =arr.length-1;i>=0;i--){int temp =arr[i];arr[i] = arr[0];arr[0] = temp;adjust(arr,0,i);}System.out.println(Arrays.toString(arr));}/*** 堆排*/public static void adjust(int[] arr,int parent,int length){int child = 2*parent+1;while(child<length){int rchild = child + 1;if(rchild<length && arr[rchild]>arr[child]){child++;}if(arr[parent] < arr[child]){int temp = arr[parent];arr[parent] = arr[child];arr[child] = temp;parent = child;child = 2*child +1;}else {break;}}}

四、選擇排序

思路

默認待排序數組當中的第一個數為最小值
找待排序數組當中真正的最小值
找到真正的最小值和待排序數組第一個數據進行交換 真正的最小值到達正確位置

代碼

    /*** 選擇排序*/public static void chooseSort(int[] arr){for(int j = 0;j<arr.length;j++){int min = arr[j];int minIndex = j;for(int i =j+1;i<arr.length;i++){if(min>arr[i]){min = arr[i];minIndex = i;}}//min的真正最小值arr[minIndex] = arr[j];arr[j] = min;}}

接下來的排序算法請看
【八大排序】java版(下) (插入、希爾、基數、歸并)

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

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

相關文章

網頁數據抓取:融合BeautifulSoup和Scrapy的高級爬蟲技術

網頁數據抓取&#xff1a;融合BeautifulSoup和Scrapy的高級爬蟲技術 在當今的大數據時代&#xff0c;網絡爬蟲技術已經成為獲取信息的重要手段之一。Python憑借其強大的庫支持&#xff0c;成為了進行網頁數據抓取的首選語言。在眾多的爬蟲庫中&#xff0c;BeautifulSoup和Scrap…

在Android Jetpack Compose中實現夜間模式

在Android Jetpack Compose中實現夜間模式 隨著用戶對夜間模式需求的增加,Android開發者需要掌握如何在應用中實現這一功能。Jetpack Compose作為現代Android UI工具包,提供了簡便且靈活的方式來實現夜間模式。本文將詳細介紹如何在Jetpack Compose中實現夜間模式,包括配置…

Linux系統之玩轉fortune命令

Linux系統之好玩的fortune命令 一、fortune命令介紹1.1 fortune簡介1.2 fortune中英文 二、本地環境介紹2.1 本地環境規劃2.2 本次實踐介紹 三、檢查本地環境3.1 檢查本地操作系統版本3.2 檢查系統內核版本 四、fortune英文版的使用4.1 安裝fortune英文版4.2 命令幫助4.3 fortu…

69、Flink 的 DataStream Connector 之 Kafka 連接器詳解

1.概述 Flink 提供了 Kafka 連接器使用精確一次&#xff08;Exactly-once&#xff09;的語義在 Kafka topic 中讀取和寫入數據。 目前還沒有 Flink 1.19 可用的連接器。 2.Kafka Source a&#xff09;使用方法 Kafka Source 提供了構建類來創建 KafkaSource 的實例。以下代…

安卓手機刷入Magisk面具教程

手機如果想獲取 Root 權限&#xff0c;刷入面具是必要的做法。本期文章將會教你如何刷入 Magisk 面具。 準備工作 Magisk: 關注微信公眾號 heStudio Community回復 magisk 獲取下載鏈接。第三方 Recovery&#xff08;官方 Recovery 能玩出什么花樣&#xff1f;&#xff1f;&a…

PDM系統:企業產品數據管理、PDM系統哪個好

PDM系統&#xff1a;企業產品數據管理、PDM系統哪個好 在當今這個數據驅動的時代&#xff0c;企業產品數據管理&#xff08;PDM&#xff09;系統已成為企業提升競爭力、加速產品創新、優化生產流程的關鍵工具。PDM系統不僅是一個技術平臺&#xff0c;更是企業實現數字化轉型的重…

防火墻負載分擔,帶寬策略

一、實驗拓撲圖 二、實驗要求 12&#xff0c;對現有網絡進行改造升級&#xff0c;將當個防火墻組網改成雙機熱備的組網形式&#xff0c;做負載分擔模式&#xff0c;游客區和DMZ區走FW3&#xff0c;生產區和辦公區的流量走FW1 13&#xff0c;辦公區上網用戶限制流量不超過100M&a…

昇思25天學習打卡營第23天|基于MobileNetv2的垃圾分類

基于MobileNetv2的垃圾分類 1、實驗目的 了解熟悉垃圾分類應用代碼的編寫&#xff08;Python語言&#xff09;&#xff1b;了解Linux操作系統的基本使用&#xff1b;掌握atc命令進行模型轉換的基本操作。 2、MobileNetv2模型原理介紹 MobileNet網絡是由Google團隊于2017年提…

在 Debian 12 上安裝 budgie-extras-common 包

在 Debian 12 上安裝 budgie-extras-common 包&#xff1a; 安裝前的準備 更新 apt 數據庫&#xff1a; 使用 apt-get:sudo apt-get update或者使用 apt:sudo apt update如果使用 aptitude&#xff08;通常不在 Debian 默認安裝中&#xff09;&#xff0c;首先需要安裝它&…

效能工具:執行 npm start 可直接切換proxy代理UR后直接啟動項目

1) 背景: 我們項目是2個前端3個后端的配置。前端和每個后端都有需要調試的接口。 因此經常切換vite.congig.js中的proxy后端代理鏈接&#xff0c;是挺麻煩的。 于是我研究如何能快速切換后端URL&#xff0c;所幸懶人有懶福&#xff0c;我找到了Inquirer 和 fs&#xff0c; 實…

根據日志繪制障礙物輪廓點和中心點

繪制log中的障礙物凸包點&#xff0c;首先給出log日志中的障礙物的凸包點 [Info]-[PointCloudHandle:88]:[2024-07-14,09:55:41.052]-back obj size 6 [Info]-[PointCloudHandle:92]:[2024-07-14,09:55:41.052]-back obj size 6 cur idx 1 [Info]-[PointCloudHandle:93]:[2024…

極客筆記【收藏】

1. 鴻蒙調試命令&#xff08;adb&#xff09;&#xff1a; OH HDC命令使用指南|極客筆記 2. 添加selinux 權限 Android 根據AVC報錯添加Selinux 權限|極客筆記

【面試題】Golang 鎖的相關問題(第七篇)

目錄 1.Mutex 幾種狀態 1. 鎖定狀態&#xff08;Locked&#xff09; 2. 未鎖定狀態&#xff08;Unlocked&#xff09; 3. 喚醒狀態&#xff08;Woken&#xff09; 4. 饑餓狀態&#xff08;Starving&#xff09; 5. 等待者計數&#xff08;Waiters Count&#xff09; 總結…

STM32+TMC2209控制步進電機正反轉。

STM32F103ZET6TMC2209控制步進電機正反轉 1. 步進電機介紹2 驅動器TMC2209介紹2.1 引腳圖及其功能2.2 細分介紹2.3 TMC控制驅動器接法 3 控制器介紹3.1 確定控制引腳3.2 UBEMX配置3.2.1 GPIO配置3.2.2 NVIC配置3.2.3 RCC配置3.2.4 SYS配置3.2.5 USRAT2配置&#xff08;PS:沒用上…

單相電機或風扇接電容的具體接線方法示例

單相電機或風扇接電容的具體接線方法示例 如下圖所示&#xff0c;單相電機引出3根繞組線&#xff08;不同品牌或型號的電機&#xff0c;引出線的顏色可能會有差異&#xff09;&#xff0c; 那么如何進行接線呢&#xff1f; 首先&#xff0c;跳過萬用表測量主、副繞組的阻值…

Unable to obtain driver using Selenium Manager: Selenium Manager failed解決方案

大家好,我是愛編程的喵喵。雙985碩士畢業,現擔任全棧工程師一職,熱衷于將數據思維應用到工作與生活中。從事機器學習以及相關的前后端開發工作。曾在阿里云、科大訊飛、CCF等比賽獲得多次Top名次。現為CSDN博客專家、人工智能領域優質創作者。喜歡通過博客創作的方式對所學的…

聊聊自動駕駛中的路徑和軌跡

在移動機器人領域&#xff0c;路徑&#xff08;Path&#xff09;和軌跡&#xff08;Trajectory&#xff09;是兩個緊密相關但又有所區別的概念。 路徑 是機器人從起點到終點的一系列點的序列&#xff0c;它只考慮了位置信息&#xff0c;而不考慮時間信息。路徑描述了機器人將要…

Java中常見的語法糖

文章目錄 概覽泛型增強for循環自動裝箱與拆箱字符串拼接枚舉類型可變參數內部類try-with-resourcesLambda表達式 概覽 語法糖是指編程語言中的一種語法結構&#xff0c;它們并不提供新的功能&#xff0c;而是為了讓代碼更易讀、更易寫而設計的。語法糖使得某些常見的編程模式或…

【Linux】Ubuntu 漏洞掃描與修復的吃癟經歷

自從上次“劫持”事情后&#xff0c;項目經理將所有跟安全相關的都推給我了&#xff08;不算 KPI 又要被白嫖&#xff0c;煩死了&#xff09;。這次客戶又提了一個服務器安全掃描和漏洞修復的“活”&#xff0c;我這邊順手將過程記錄一下&#xff0c;就當經驗總結跟各位分享一下…