冒泡排序和遞歸排序

目錄

一.冒泡排序

1.1概念:

1.2原理:

1.3簡單示例講解:

二.遞歸排序

1.1概念:

1.2原理:

1.3簡單示例講解:


一.冒泡排序

1.1概念:

冒泡排序是一種最基礎的交換排序。

通過反復交換相鄰兩個元素的位置,使得每一輪循環都能將未排序的部分中的最大元素移動到數組的末尾。

因為越小的元素會經由交換像是氣泡一樣慢慢浮到數組的頂端,所以叫做冒泡排序。

1.2原理:

從數組的第一個元素開始,依次比較相鄰的兩個元素大小。

如果前面的元素比后面的元素大,就交換它們的位置,這樣一輪比較下來,最大的元素就被交換到數組的最后一個位置了。

接下來,重復這個過程,有n個元素,就要重復n-1次,直到所有元素都被排序為止。

1.3簡單示例講解:

#定義一個數列,作為理解。ls=[9,5,2,7,6,4,1]
ls = [9,5,2,7,6,4,1]
for i in range(0,len(ls)-1):for j in rang(0,len(ls)-1):if ls[j] >= ls[j+1]:   ls[j],ls[j+1] = ls[j+1],ls[j]
print(ls)#函數(作為初學者,要學會習慣用函數來進行分治解決)def bubble_sort(ls):for i in range(len(ls)):for j in range(len(ls)):if ls[j] >= ls[j+1]:ls[j],ls[j+1] = ls[j+1],ls[j]return ls

首先,要獲取數列的長度,可以用len()函數來解決,之后通過兩個循環嵌套實現冒泡排序。外層循環用來遍歷整個數組,內層循環則用來處理未排序的部分。

內循環中,比較兩個相鄰的元素大小,如果前一個元素比后一個元素大,那么就交換兩個元素的位置。這樣,每一輪遍歷就能將未排序部分中的最大元素交換到數組的末尾。

達成排序的目的。

二.遞歸排序

1.1概念:

這里講解的是一種最基礎的遞歸排序。

遞歸,簡而言之,就是函數自己調用自己。遞歸作為一種算法在程序設計語言中廣泛應用。

遞歸是一個過程或函數在其定義或者說明中有直接或者間接調用自身的一種方法,通常把一個大的復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解。

遞歸算法只需要少量的程序就能描述出解題過程中所需要的多次重復計算,大大的減少了程序的代碼量。

1.2原理:

選擇一個值作為key,再將key和其他數一一比較,比它大的放在原來的位置,比它小的數則和key互換位置,到最后實現數據大小的排序。

在這個問題中,我們可以將第一個元素作為key。

1.3簡單示例講解:

#定義一個函數,有三個參數,vect:待排序的序列,first:當前處理的起始位置,last:當前處理的結束位置(不包含)。def resort(vect,first,last):if first == last:   #函數首先判斷first=last,即起始位置等于結束位置,就輸出當前列表print(vect)else:for i in range(first,last):Min = min (vect[first:last])index = vect.index(Min)#找到first到last范圍內的最小值Min,并找到其索引indexvect[first],vect[index] = vect[index],vect[first]#將第first個元素和最小值Min交換位置resort(vect,first+1,last)#調用resort函數,起始位置+1繼續排列return vectvect = [5,8,10,20,9,7,1]
resort(vect,0,len(vect))

在上述代碼中,我們是直接在原來的數列上進行排序,存在一些問題,可以使用copy.deepcopy()來創建vect新副本,以此避免修改原始列表,以下是修正后的代碼:

import copydef resort(vect, first, last):if first == last:print(vect)else:for i in range(first, last):new_vect = copy.deepcopy(vect)  # 創建副本Min = min(new_vect[first:last])index = new_vect.index(Min)new_vect[first], new_vect[index] = new_vect[index], new_vect[first]resort(new_vect, first+1, last)# 測試代碼
vect = [5, 8, 10, 20, 9, 7, 1]
resort(vect, 0, len(vect))

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

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

相關文章

Jupyter Lab 軟件安裝與使用

軟件簡介 Jupyter Lab 軟件是一個基于web 的交互式開發環境,集成了代碼編輯器、終端、文件管理器等功能,使得開發者可以在一個界面中完成各種任務。JupyterLab是Jupyter Notebook的全面升級,是一個集文本編輯器、終端以及各種個性化組件于一…

Java進階學習筆記29——Math、System、Runtime

Math: 代表的是數學,是一個工具類,里面提供的都是對數據進行操作的一些靜態方法。 示例代碼: package cn.ensourced1_math;public class MathTest {public static void main(String[] args) {// 目標:了解Math類提供…

那智不二越機器人維修案例分享

那智不二越工業機器人在工業范圍內廣泛應用于各種生產領域。其示教器作為人機交互的重要設備,常常需要定期維護和Nachi不二越機械手示教盒修理。 【Nachi不二越機器人示教器維修步驟】 1. 關閉電源 在進行任何那智不二越機器人維修操作之前,務必確保機器…

<商務世界>《75 微課堂<茶葉(1)-質量分級>》

1 中國茶葉分級 中國的10級標準是按照茶葉的外觀、香氣、滋味、湯色、葉底五個方面進行評分,分別用10分制進行評分,總分為50分,得分越高,茶葉的品質就越高。具體的分數和等級如下表所示: 2 每級的特點 茶葉的質量等級…

OceanBase SQL 診斷和調優實踐——【DBA從入門到實踐】第七期

數據庫作為絕大多數應用系統儲存數據的核心系統,在用戶系統需要訪問數據時,有著至關重要的作用。在這些交互中,SQL 語言是應用與數據庫系統之間“溝通”的橋梁,它負責將應用的指令傳達給數據庫。因此,SQL 的性能好壞直…

弱類型解析

php中 轉化為相同類型后比較 先判斷數據類型后比較數值 var_dump("asdf"0);#bool(true) var_dump("asdf"1);#bool(false) var_dump("0asdf"0);#bool(true) var_dump("1asdf"1);#bool(true)1、md5撞庫 例&#xff1a; <?php incl…

【智能算法應用】模擬退火算法求解多車型車輛路徑問題HFVRP

目錄 1.算法原理2.多車型車輛路徑HFVRP數學模型3.結果展示4.參考文獻5.代碼獲取 1.算法原理 模擬退火算法&#xff08;Simulated Annealing, SA&#xff09;是一種通用概率算法&#xff0c;用于在給定一個大的搜索空間內尋找問題的近似最優解。這種算法受到物理中退火過程的啟…

ffplay 使用文檔介紹

ffplay ffplay 是一個簡單的媒體播放器,它是 FFmpeg 項目的一部分。FFmpeg 是一個廣泛使用的多媒體框架,能夠解碼、編碼、轉碼、復用、解復用、流化、過濾和播放幾乎所有類型的媒體文件。 ffplay 主要用于測試和調試,因為它提供了一個命令行界面,可以方便地查看媒體文件的…

消息隊列拉模式下的訂閱關系不一致問題及解決方法

引言 在分布式系統中&#xff0c;消息隊列&#xff08;Message Queue&#xff0c;MQ&#xff09;是一種常用的組件&#xff0c;用于解耦生產者和消費者&#xff0c;緩解系統負載&#xff0c;提升系統的可靠性和可擴展性。在Java行業中&#xff0c;常見的消息隊列中間件有Apach…

煙囪ERP系統

一、煙囪系統定義 “煙囪式”系統&#xff0c;來自維基百科的解釋是&#xff1a;一種不能與其他系統進行有效協調工作的信息系統&#xff0c;又稱為孤島系統。 二、煙囪系統的案例 比如&#xff1a;就像以下一樣&#xff0c;各個系統之間是獨立的&#xff0c;所有對接是通過…

深度學習復盤與小實現

文章目錄 一、查漏補缺復盤1、python中zip()用法2、Tensor和tensor的區別3、計算圖中的迭代取數4、nn.Modlue及nn.Linear 源碼理解5、知識雜項思考列表6、KL散度初步理解 二、處理多維特征的輸入1、邏輯回歸模型流程2、Mini-Batch (N samples) 三、加載數據集1、Python 魔法方法…

【Android】安卓設備上的Fastboot模式詳解與使用指南

原諒把你帶走的雨天 在漸漸模糊的窗前 每個人最后都要說再見 原諒被你帶走的永遠 微笑著容易過一天 也許是我已經 老了一點 那些日子你會不會舍不得 思念就像關不緊的門 空氣里有幸福的灰塵 否則為何閉上眼睛的時候 又全都想起了 誰都別說 讓我一個人躲一躲 你的承諾 我竟然沒懷…

c++筆記3

優先隊列 普通的隊列是一種先進先出的數據結構&#xff0c;元素在隊列尾追加&#xff0c;而從隊列頭刪除。優先隊列是一種按照優先級決定出隊順序的數據結構&#xff0c;優先隊列中的每個元素被賦予級別&#xff0c;隊首元素的優先級最高。 例如&#xff1a;4入隊&#xff0c…

多文件和靜態/動態鏈接以及虛擬內存管理

多目標文件鏈接 //stack.c char stack[512]; int top -1; void push(char c){stack[top] c; }char pop(void){return stack[top--]; }int is_empty(void){return top 1; }// main.c #include <stdio.h> int a,b 1; int main(){ push(a); push(b); push(c); while(!is…

Vue項目中npm run build 卡住不執行的幾種情況(實戰版)

方法一 一&#xff1a;比較常見是鏡像導致的原因 我們可以找到build/check-versions文件 將這段代碼注釋,重新運行就可以解決這個問題 if (shell.which(npm)) {versionRequirements.push({name: npm,currentVersion: exec(npm --version),versionRequirement: packageConfig.en…

MySQL 存儲過程返回更新前記錄

在MySQL中&#xff0c;如果我們想在存儲過程中返回更新前的記錄&#xff0c;這通常不是直接支持的&#xff0c;因為UPDATE語句本身不返回更新前的數據。但是&#xff0c;我們可以通過一些策略來實現這個需求。 1.MySQL 存儲過程返回更新前記錄常用的方法策略 以下是一個常見的…

應用程序圖標提取

文章目錄 [toc]提取過程提取案例——提取7-zip應用程序的圖標 提取過程 找到需要提取圖標的應用程序的.exe文件 復制.exe文件到桌面&#xff0c;并將復制的.exe文件后綴改為.zip 使用解壓工具7-zip解壓.zip文件 在解壓后的文件夾中&#xff0c;在.rsrc/ICON路徑下的.ico文件…

代碼隨想錄-Day20

654. 最大二叉樹 給定一個不重復的整數數組 nums 。 最大二叉樹 可以用下面的算法從 nums 遞歸地構建: 創建一個根節點&#xff0c;其值為 nums 中的最大值。 遞歸地在最大值 左邊 的 子數組前綴上 構建左子樹。 遞歸地在最大值 右邊 的 子數組后綴上 構建右子樹。 返回 nums…

ROS | 激光雷達包格式

ros激光雷達包格式&#xff1a; C實現獲取雷達數據 &#xff1a; C語言獲取雷達數據&#xff1a; Python語言獲取雷達數據&#xff1a; python不需要編譯&#xff0c;但是需要給它一些權限 chmod x lidar_node.py(當前的文件名字&#xff09; C實現雷達避障&#xff1a; python…

【Xilinx】常用的全局時鐘資源相關Xilinx器件原語

1 概述 常用的與全局時鐘資源相關的Xilinx器件原語包括&#xff1a; IBUFGIBUFGDS、OBUFGDS 和 IBUFDS、OBUFDSBUFGBUFGPBUFGCEBUFGMUXBUFGDLLIBUFDS_GTXE1IBUFDS_GTE2IBUFDS_GTE3OBUFDS_GTE3IBUFDS_GTE4OBUFDS_GTE4DCM 剛開始看到這寫源語&#xff0c;免不了好奇這些源語對應的…