算法基礎(python版本)

第二章 算法設計思想

一、搜索排序

1.排序算法

https://visualgo.net/zh/sorting

(1)冒泡排序
# 思路:
# (1)比較相鄰元素,如果第一個比第二個大,則交換他們
# (2)第一輪下來,可以保證最后一個數一定是最大的;第二輪下來,可以保證倒數第二個數一定是第二大的。
# (3)執行n-1輪,可以完成排序。
# 比較n-1次?用[3,2,1]冒泡排序后只需要比較2次。
def bubleSort(arr):for j in range(len(arr) - 1):for i in range(len(arr) - 1):if arr[i] > arr[i+1]:temp = arr[i]arr[i] = arr[i + 1]arr[i + 1] = temparr = [5, 4, 3, 2, 1]
bubleSort(arr)
print(arr)
(2)選擇排序
# 思路:
# (1)找到數組中的最小值,選中它并將其放置在第一位 → 經過第一輪交換,第一個值肯定是最小的。
# (2)接著找到第二小的值,選中必將其放置在第二位 → 經過第二輪交換,第二個值肯定是第二小的。
# 以此類推,交換n-1輪def selectionSort(arr):for i in range(len(arr) - 1):indexMin = ifor j in range(i, len(arr)):if arr[j] < arr[indexMin]:indexMin = jtemp = arr[i]arr[i] = arr[indexMin]arr[indexMin] = temparr = [2, 3, 1] # 最壞的情況
selectionSort(arr)
print(arr)

2.搜索算法

http://data.biancheng.net/view/336.html

# 二分插入
# 為什么更新左邊界需+1,但是更新右邊界卻不需要+1?
# 使用了左閉右開的搜索區間,即[l, r)。這意味著左邊界l是包含在搜索區間內的,而右邊界r是不包含在搜索區間內的。所以,當更新左邊界l時,需要加1,因為已經排除了中間元素,而當你更新右邊界r時,這不需要加1,因為要保持右邊界不包含在搜索區間內。這樣做的好處是,當搜索區間為空時,l和r會相等,而且l就是目標元素應該插入的位置。
# 二分查找:從列表中查找元素下標
def binaryInsertIndex(arr, ele):if ele not in arr:return -1l = 0r = len(arr) - 1while l < r:mid = (l + r) // 2if ele < arr[mid]:r = midelse:l = mid + 1 # ele不小于arr[mid],意味著ele >= arr[mid],所以需加上1。return larr = [2,3,6,7]
element = 3
arr.insert(binaryInsertIndex(arr, element), element)
print(arr)

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

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

相關文章

2023最全的Web自動化測試介紹

做測試的同學們都了解&#xff0c;做Web自動化&#xff0c;我們主要用Selenium或者是QTP。 有的人可能就會說&#xff0c;我沒這個Java基礎&#xff0c;沒有Selenium基礎&#xff0c;能行嗎&#xff1f;測試雖然屬于計算機行業&#xff0c;但其實并不需要太深入的編程知識&…

介紹一個功能強大的shopify app——TINYIMG

各位觀眾老爺&#xff0c;南來的北往的&#xff0c;東去的西走的&#xff0c;今天給大家推薦一個功能很強大的shopify app 當當當 那就是 tinyimg 這個app有多牛逼呢&#xff0c;且聽我慢慢道來 首先這個app可以用來優化圖片大小&#xff0c;給你的網站提提速 然后這個app還可…

Android使用AIDL+MemoryFile傳遞大數據

Android進程間通信經常會使用AIDL&#xff0c;簡單方便&#xff0c;但是數據量有限制&#xff0c;超過一定值會報錯&#xff1a; E !!! FAILED BINDER TRANSACTION !!! (parcel size 2073744) 可以通過使用AIDLMemoryFile傳遞大數據 新建AIDL接口&#xff1a; interface On…

CCFCSP試題編號:201803-2試題名稱:碰撞的小球

一、題目描述 二、思路 1.首先妾身分析這個題目&#xff0c;想要解題&#xff0c;得得解決2個問題。 1&#xff09;判斷小球到達端點或碰撞然后改變方向&#xff1b; 2&#xff09;每時刻都要改變位置 兩個問題都比較好解決&#xff0c;1&#xff09;只要簡單判斷坐標&…

形態學操作—膨脹

在 OpenCV 中&#xff0c;圖像形態學操作是一組基于圖像形狀的處理技術&#xff0c;其中膨脹&#xff08;Dilation&#xff09;是其中之一。膨脹操作可用于圖像處理中的特征增強、去噪、分割和邊緣檢測等。其基本原理是利用結構元素&#xff08;Kernel 或 Structuring Element&…

Tomcat實現WebSocket即時通訊 Java實現WebSocket的兩種方式

HTTP協議是“請求-響應”模式&#xff0c;瀏覽器必須先發請求給服務器&#xff0c;服務器才會響應該請求。即服務器不會主動發送數據給瀏覽器。 實時性要求高的應用&#xff0c;如在線游戲、股票實時報價和在線協同編輯等&#xff0c;瀏覽器需實時顯示服務器的最新數據&#x…

UML建模圖文詳解教程06——順序圖

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文參考資料&#xff1a;《UML面向對象分析、建模與設計&#xff08;第2版&#xff09;》呂云翔&#xff0c;趙天宇 著 順序圖概述 順序圖(sequence diagram&#xff0c;也…

(三)C語言之for語句概述

&#xff08;三&#xff09;C語言之for語句概述 一、使用for語句實現打印華氏溫度與攝氏溫度轉換二、for語句概述三、練習 一、使用for語句實現打印華氏溫度與攝氏溫度轉換 #include <stdio.h> /*當華氏溫度為 0,20,40,...300時&#xff0c;打印出華氏溫度與攝氏溫度對照…

一個簡單的QT應用示例

一個簡單的QT應用示例&#xff1a;創建一個窗口程序。 首先&#xff0c;確保已經安裝了Qt開發環境。接下來&#xff0c;按照以下步驟創建一個簡單的窗口程序&#xff1a; 1. 打開Qt Creator&#xff0c;點擊“新建文件或項目”。 2. 選擇“應用程序”&#xff0c;然后點擊“下…

【MATLAB】根軌跡的繪制及rltool工具的使用

目錄 一、MATLAB中傳遞函數的表示二、rlocus函數繪制根軌跡1.常規根軌跡仿真示例2.參數根軌跡仿真示例3.零度根軌跡仿真示例 三、圖形化工具rltool介紹 一、MATLAB中傳遞函數的表示 在繪制系統的根軌跡之前&#xff0c;需要知道傳遞函數在matlab中如何表示。 在matlab中&#…

VOC數據集和COCO數據集直接的相互轉換

VOC數據集格式 get_list.py import os import random import shutil# 設置隨機種子 random.seed(1000)# 判斷Annotations和JpegImages是否對應 train_precent=0.8 label_path= "../../Annotations" print(os.path.abspath(label_path)) save="../Main" pr…

repo init報error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

repo init報error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 1 repo init出錯的信息2 解決方法 在ubuntu執行repo init的時候報了repo init報error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed這種錯誤&#xff0c;解決方法是需要更新本地…

PS給圖片增加一個白色邊框。

問題描述&#xff1a;PS如何給圖片增加一個白色邊框&#xff1f; 解決辦法&#xff1a; 第一步&#xff1a;使用shiftAltA快捷鍵&#xff0c;在圖片四周拉出一個灰白色的邊框。如下圖所示&#xff1a; 第二步&#xff0c;使用快捷鍵Ctrlshiftn新建一個圖層。 并把新建的圖層…

創建maven的web項目

&#xff08;一&#xff09;創建maven的web項目 Step1、創建一個普通的maven項目 &#xff08;1&#xff09;新建一個empty project&#xff0c;命名為SSM2。 點擊項目名&#xff0c;右鍵new&#xff0c;選擇Module&#xff0c;左側選擇“Maven archetype”&#xff0c;可以給…

我叫:快速排序【JAVA】

1.自我介紹 1.快速排序是由東尼霍爾所發展的一種排序算法。 2.快速排序又是一種分而治之思想在排序算法上的典型應用。 3.本質上來看&#xff0c;快速排序應該算是在冒泡排序基礎上的遞歸分治法。 2.思想共享 快速排序(Quicksort)是對冒泡排序的一種改進。基本思想是:通過一趟…

【iOS】數據持久化(二)之歸檔和解檔(iOS 13以后)

在之前介紹的數據存儲方法中&#xff0c;不管是NSUserDefaults還是plist文件都不能對自定義對象進行存儲&#xff0c;OC提供的解歸檔恰好解決了這個問題 本片文章對 iOS13 以后的版本 歸檔和解檔 進行介紹。老版本的解歸檔見這篇文章&#xff1a;【iOS】文件&#xff08;對象數…

Python Anaconda創建虛擬環境及Pycharm使用虛擬環境

目錄 前言 一、Anaconda與Pycharm 二、conda常用命令 三、Pycharm使用虛擬環境 總結 前言 我們在做開發任務時可能會創建多個項目&#xff0c;這些項目可能會依賴于不同的Python環境。比如有的用到Python3.6、有的用到Python3.7&#xff1b;有的用Pytorch開發、有的用Tens…

解決:ImportError: cannot import name ‘Sequence‘ from ‘collections‘

解決&#xff1a;ImportError: cannot import name ‘Sequence‘ from ‘collections‘ 背景 在使用之前的代碼時&#xff0c;報錯&#xff1a; File “G:\research\code\MicroDE_py\plot_bcic_iv_4_ecog_trial.py”, line 262, in from skorch.helper import predefined_spl…

Java 數據結構篇-實現單鏈表核心API

&#x1f525;博客主頁&#xff1a; 小扳_-CSDN博客 ?感謝大家點贊&#x1f44d;收藏?評論? 文章目錄 1.0 單鏈表的說明 2.0 單鏈表的創建 2.1 單鏈表 - 頭插節點 2.2 單鏈表 - 遍歷 2.2.1 使用簡單的 for/while 循環 2.2.2 實現 forEach 方法 2.2.3 實現迭代器的方法 2.…

UE5 中的computer shader使用

轉載&#xff1a;UE5 中的computer shader使用 - 知乎 (zhihu.com) 目標 通過藍圖輸入參數&#xff0c;經過Compture Shader做矩陣運算 流程 1. 新建插件 2. 插件設置 3. 聲明和GPU內存對齊的參數結構 4. 聲明Compture Shader結構 5. 參數綁定 6. 著色器實現 7. 分配 work gr…