排序算法(Java)

目錄

前言

常見的排序算法實現:

1. 冒泡排序

思路分析:

代碼實現:

2.選擇排序

思路分析:

代碼實現:

3.插入排序

思路分析:

代碼實現:

4.快速排序

思路分析:

代碼實現:


前言

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。

生活中各種地方都需要用到排序,所以學好排序算法是非常重要的。

排序分為 內部排序外部排序

內部排序:數據元素全部放在內存中的排序。
外部排序:數據元素太多不能同時放在內存中,根據排序過程的要求不能在內外存之間移動數據的排序。

這部分主要是內部排序。排序講解都以升序為例。
————————————————
版權聲明:本文為CSDN博主「風繼續吹TT」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Edward_Asia/article/details/121419975

常見的四種排序算法:

1. 冒泡排序

2. 選擇排序

3.插入排序

4.快速排序

常見的排序算法實現:

1. 冒泡排序

思路分析:

1.兩兩相鄰元素比較,大的元素往后移,直到讓最大的元素在最后面

2.當有n個元素時,外循環會進行(n-1)次排序,因為最后剩下一個數,不需要比較

3.當進行第i趟排序時,內循環會進行n-i次比較

代碼實現:

 //冒泡排序public void  BubbleSort( int[] arr){//整體思路:通過每一次循環的比較找到最大值int n=arr.length;//外層排序n-1次for(int i=0;i<n-1;i++){//內層比較n-i-1次for(int j=0;j<n-i-1;j++){if(arr[j]>arr[j+1])//交換相鄰的兩個數組,將大的往后排{int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}

2.選擇排序

思路分析:

1.首先,找到數組中最大(小)的那個元素;
2.其次,將它和數組的第一個元素交換位置(如果第一個元素就是最大(小)元素那么它就和自己交換);
3.再次,在剩下的元素中找到最大(小)的元素,將它與數組的第二個元素交換位置。如此往復,直到將整個數組排序。

總結:這種方法叫做選擇排序,因為它在不斷地選擇剩余元素之中的最大(小)者

代碼實現:

 //選擇排序public void SelectSort ( int[] arr){int n=arr.length;//整體思路;內循環找到最小值的下標,與第一個數交換,重復找小,交換for(int i=0;i<n-1;i++){int minIndex=i;for(int j=i+1;j<n;j++){if(arr[j]<arr[minIndex])//如果此時minIndex索引處的值不是最小的,交換{minIndex=j;}}//交換arr[i]和arr[minIndex]int temp=arr[i];arr[i]=arr[minIndex];arr[minIndex]=temp;}}

3.插入排序

思路分析:

1.對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入。
2.為了給要插入的元素騰出空間,我們需要將插入位置之后的已排序元素在都向右移動一位。
3.插入排序所需的時間取決于輸入中元素的初始順序。例如,對一個很大且其中的元素已經有序(或接近有序)的數組
4.進行排序將會比對隨機順序的數組或是逆序數組進行排序要快得多

代碼實現:

 //插入排序public void InsertSort(int[] arr){int n=arr.length;//整體思路:從認為第一個元素有序開始,依次將后面的元素插入到這個有序序列中來,直到整個序列有序為止for(int i=1;i<n;i++)//從第二個元素開始遍歷{int key = arr[i];//當前插入的元素int j = i - 1;while (j >= 0 && arr[j] > key)//將key插入到前面有序數組的合適位置{arr[j + 1] = arr[j];//把arr[j]后移一位j--;//j減1繼續比較,直到找到合適的位置}arr[j + 1] = key;}}

4.快速排序

思路分析:

1.將待排序的序列找一個基準值(通常選最兩邊)

2.采用遞歸的思想,將小于基準值的放在他前面,大于基準值的在他后面

代碼實現:

//快速排序public  static void QuickSort(int[] arr)//對外提供的排序方法,方便用戶調用{QuickSort(arr,0,arr.length-1);}//用遞歸排序對數組進行分區,小于基準點的在左邊,大于基準點的在右邊private static int Partition(int[] arr, int left, int right){int pivot = arr[right];//選擇最右邊為基準點int i = left-1;//初始一個小于元素邊界的變量for(int j=left;j<right;j++){if(arr[j]<=pivot)//如果當前元素小于基準點{i++;//交換arr[i]和arr[j],將小于基準點的元素放在前面int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}//將基準點放在正確的位置上,既i+1int temp = arr[i+1];arr[i+1] = arr[right];arr[right] = temp;return i+1;//返回基準點的最終位置aaaaaalaakka}
//-------------------------------------------------------------------private  static  void QuickSort(int[] arr,int left,int right)//核心的遞歸排序方法,left表示當前排序的左邊界,right表示用邊界{if(left<right){int pivot=Partition(arr,left,right);QuickSort(arr,left,pivot-1);//對基準點左邊進行遞歸排序QuickSort(arr,pivot+1,right);//對基準點右邊進行遞歸排序}}

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

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

相關文章

深度學習打卡第N6周:中文文本分類-Pytorch實現

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 一、準備工作 數據格式&#xff1a; import torch from torch import nn import torchvision from torchvision import transforms,datasets import os,PIL,p…

【代碼隨想錄day 24】 力扣 90. 集合II

視頻講解&#xff1a;https://www.bilibili.com/video/BV1vm4y1F71J/?vd_sourcea935eaede74a204ec74fd041b917810c 文檔講解&#xff1a;https://programmercarl.com/0090.%E5%AD%90%E9%9B%86II.html#%E6%80%9D%E8%B7%AF 力扣題目&#xff1a;https://leetcode.cn/problems/su…

.NET 6 文件下載

.NET 6 API中實現文件的下載。創建HttpHeaderConstant用于指定http頭。public sealed class HttpHeaderConstant{public const string RESPONSE_HEADER_CONTENTTYPE_STREAM "application/octet-stream";public const string RESPONSE_HEADER_NAME_FILENAME "f…

[數據結構——lesson6.棧]

目錄 引言 1.棧的概念和結構 棧的核心概念 棧的結構 2.棧的實現 2.1棧的實現方式 2.2棧的功能 2.3棧的聲明 1.順序棧 2。鏈式棧 2.4棧的功能實現 1.棧的初始化 2.判斷棧是否為空 3.返回棧頂元素 4.返回棧的大小 5.元素入棧 6.元素出棧 7.打印棧的元素 8.銷毀…

華為HICE云計算的含金量高嗎?

在數字時代的今天&#xff0c;云計算技術證飛速的發展成為企業數字化轉型的重要支撐。而華為作為領先的通信和信息技術公司&#xff0c;推出的HCIE云計算認證備受關注。接下來就來說說華為HCIE云計算認證的含金量到底有多高。HCIE認證被認為是華為認證中的最高等級&#xff0c;…

OSPF協議原理講解和實際配置(華為/思科)

OSPF&#xff08;open shorest path first&#xff0c;開放最短路徑優先&#xff09;是一種動態的&#xff0c;基于鏈路狀態的動態路由協議&#xff0c;廣泛的應用在企業網絡中&#xff0c;通過維護網絡拓撲信息&#xff0c;利用 Dijkstra 算法實現最短路徑&#xff0c;實現高效…

【開題答辯全過程】以 《黃帝內經》問答系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

npm : 無法加載文件 C:\Program Files\nodejs\npm.ps1,因為在此系統上禁止運行腳

這個錯誤是由于 PowerShell 的執行策略限制&#xff0c;導致無法運行腳本。你可以通過以下步驟解決這個問題&#xff1a; 1. 查看當前的執行策略 打開 PowerShell&#xff0c;以管理員身份運行&#xff0c;輸入以下命令查看當前的執行策略&#xff1a; Get-ExecutionPolicy如果…

macOS蘋果電腦運行向日葵遠程控制軟件閃退

文章目錄問題原因分析修復附錄向日葵字太小按Ctrl鍵會彈出開始菜單的問題問題 向日葵是一款遠程控制的應用&#xff0c;在macOS下也能運行&#xff0c; 本來用的好好的&#xff0c;有一天升級后突然就運行不起來了&#xff0c;一點開能顯示幾秒首界面&#xff0c;立馬就自動退…

Linux dma-buf 框架原理、實現與應用詳解

1. 背景與意義 1.1 異構系統與緩沖區共享的挑戰 在現代 SoC、嵌入式、圖形和多媒體系統中&#xff0c;CPU、GPU、VPU、ISP、DMA 控制器等多個硬件單元需要高效地共享和傳遞大塊數據&#xff08;如圖像幀、視頻流、AI 張量等&#xff09;。如果每個設備都維護獨立的緩沖區&…

Scikit-learn Python機器學習 - 分類算法 - 樸素貝葉斯

鋒哥原創的Scikit-learn Python機器學習視頻教程&#xff1a; https://www.bilibili.com/video/BV11reUzEEPH 課程介紹 ? 本課程主要講解基于Scikit-learn的Python機器學習知識&#xff0c;包括機器學習概述&#xff0c;特征工程(數據集&#xff0c;特征抽取&#xff0c;特…

如何免費股票數據API(第13期):滬深A股《最新分時交易》數據獲取大全:附Python、Java等多語言實戰教程與接口文檔說明

在金融科技迅猛發展的今天&#xff0c;股票量化分析以其嚴謹的科學性和強大的系統性&#xff0c;正日益成為投資領域的主流方法論。任何卓越的量化模型的誕生&#xff0c;都離不開全面、精準、及時的數據支撐。無論是躍動著的實時交易數據、沉淀了歷史規律的K線走勢&#xff0c…

國標GB28181視頻EasyGBS視頻監控平臺:一網聯全城,交通道路可視化、視頻巡檢、應急指揮“三合一”。

一、方案背景?人車暴漲&#xff0c;路口告急&#xff1a;高峰堵、事故慢、取證難&#xff0c;老辦法已拖不動城市交通。破局之道&#xff0c;先看攝像頭——EasyGBS 嚴格遵循 GB28181 國標&#xff0c;一站式完成直播、存儲、檢索、轉碼&#xff0c;把萬千路口秒級搬上云端&am…

單元測試(白盒測試方法)

一、單元測試1.單元測試是對軟件的基本組成單元進行的測試&#xff0c;如函數、類或類的方法。單元測試是對軟件的最小可測試單元&#xff08;即可獨立編譯或匯編的程序模塊&#xff09;進行的測試活動&#xff0c;也稱為模塊測試二、白盒測試方法實例代碼public static int te…

2010-2022 同等學力申碩國考:軟件工程簡答題真題匯總

2010年簡答題 給出數據流圖的定義&#xff0c;并舉例說明數據流圖的四個基本構成成份。 數據流圖&#xff08;Data Flow Diagram, DFD&#xff09;是一種用于描述系統中數據流動和處理過程的圖形工具。它通過直觀的方式展示了系統的輸入數據如何經過一系列處理變換為輸出數據&a…

海外盲盒APP開發:如何用技術重構“驚喜經濟”

當盲盒的神秘感遇上技術的確定性&#xff0c;一場關于消費體驗的革命正在海外市場悄然發生。從概率算法的公平性到AR虛擬開箱的沉浸感&#xff0c;從跨境物流的實時追蹤到多語言支持的無縫切換&#xff0c;海外盲盒APP的開發是一場技術、設計與商業邏輯的深度融合。概率算法&am…

Aosp13 手機sim卡信號格顯示修改

工作中&#xff0c;客戶要求對信號格顯示偏弱不夠友好為由&#xff0c;提出修改&#xff0c;要求使其顯示信號強一些。在此記錄 一問題&#xff1a;修改系統sim卡顯示的信號格&#xff0c;在設備其他配置不變的情況下&#xff0c;使其信號格顯示比原有的要優秀二 …

硬件開發2-匯編2(ARMv7-A)- 裸機開發

一、指令1、b&#xff08;Branch&#xff09;原型&#xff1a;B<c> <label>作用&#xff1a;實現無條件跳轉&#xff0c;常用于不返回的跳轉場景特點&#xff1a;僅跳轉到目標地址&#xff0c;不保存返回地址示例&#xff1a;b reset ;跳轉到reset標號處執…

清源 SCA 社區版更新(V4.2.0)|漏洞前置感知、精準修復、合規清晰,筑牢軟件供應鏈安全防線!

隨著數字化進程加速&#xff0c;軟件供應鏈安全威脅日益復雜&#xff0c;公開漏洞響應滯后、0day 攻擊防不勝防、組件升級編譯失敗、安全與合規風險混雜......這些痛點讓企業安全團隊、運維人員及研發團隊疲于應對。自 2025 年 7 月 1 日安勢清源 SCA 社區版首次正式發布以及在…

氚燃料增殖里程碑:MIT新型BABY包層技術實驗驗證

● 導語 5月20日&#xff0c;麻省理工學院&#xff08;MIT&#xff09;發文稱&#xff0c;BABY實驗首次獲取了氚在裝置內增殖的實測數據&#xff0c;驗證了核心模型&#xff0c;并為未來核聚變電廠的燃料自循環奠定了重要基礎。 原文&#x1f447;&#x1f3fb; https://m…