排序與查找,簡略版

數組的排序

排序的基本介紹

排序是將一組數據,按照一定順序進行排列的過程
排序的分類:

  1. 內部排序:
    1. 一次性
    2. 適用數據量小的情況
      將需要處理的數據都加載到內部存儲器中進行排序。包括交換式排序,選擇式排序,插入式排序
  2. 外部排序:
    1. 多次
    2. 適用數據量大的情況
      數據量過大,無法全部加載到內存中,需要借助外部存儲進行排序。包括合并排序法,直接合并排序法

交換式排序

交換式排序是內部排序的一種,運用數值比較后,依據判定規則對數據位置進行交換,以達到排序目的
交換式排序有兩種

  1. 冒泡排序
  2. 快速排序

冒泡排序法

冒泡排序的思想:
以遞增排序為例,冒泡排序有兩種思路:一種是從前向后遍歷每次循環都將尚未排序的部分中的最大值放到未排序部分的最后一位;一種是從后向前遍歷,每次都將位排序部分的最小值放到未排序部分的最前面

冒泡排序是需要雙層循環來實現的

  1. 外層循環控制要幾次將指定數據放到指定位置(最不理想次數也就是len()-1次)
  2. 內層循環控制要想將本輪的指定數據放到指定位置所需要逐個比較數據的次數(最不理想次數也就是len()-i,其中i表示第幾次外循環)

優化

只需要本次內部循環沒有改變任何數據的位置,就可以說明數組已經排序完畢了,也就可以提前結束內外雙循環,從而優化代碼。(可以通過設置flag來判斷是否有改變數據位置)

冒泡代碼

package main

import (
“fmt”
)

func BubbleSort(a *[5]int) {
leng := len((*a))
fmt.Printf(“排序前:%v\n”, (*a))
for i := 0; i < leng-1; i++ {
flag := false
for j := 0; j < leng-1-i; j++ {
if (*a)[j] > (*a)[j+1] {
c := (*a)[j]
(*a)[j] = (*a)[j+1]
(*a)[j+1] = c
if !flag {
flag = true
}
}
}
if !flag {
return
}
}
}
func main() {
a := [5]int{4, 12, 532, 1, 23}
BubbleSort(&a)
fmt.Printf(“排序后:%v”, a)
}
輸出結果:
排序前:[4 12 532 1 23]
排序后:[1 4 12 23 532]

數組的查找

  1. 順序查找
  2. 二分查找

二分查找

二分查找是對一個有序數列進行的。

二分查找的思路

數組a是一個有序數組,假設是遞增的
left=0,right=len(a)-1
mid=(left+right)/2

  1. mid<find left=mid+1
  2. mid>find right=mid-1
  3. mid=find return
  4. 123是遞歸進行的
    如果left>right,就說明找不到這個值。

代碼實現

func BinaryFind(arr [6]int, left int, right int, find int) int {
if left > right {
return -1
}
midd := (left + right) / 2
mid := arr[midd]
if mid > find {
return BinaryFind(arr, left, midd-1, find)
} else if mid < find {
return BinaryFind(arr, midd+1, right, find)
} else {
return midd
}
}
func main() {
a := [6]int{1, 3, 6, 8, 10, 21}
index := BinaryFind(a, 0, len(a)-1, 8)
fmt.Printf(“%d”, index)
}

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

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

相關文章

打靶日常-XSS(反射型和存儲型)

目錄 小皮: 1. 2.這里需要登錄,我們之前爆破出賬號密碼在這里就可以用?編輯 登錄之后:?編輯 使用工具: 先輸入正確字符進行測試:aaa 進行測試: 3.換種控制臺顯示 結果:(使用f12大法) DVWA: 反射型XSS: 低: ?編輯 中:大小寫繞過: ?編輯 也可以雙寫繞過: ?編…

二叉搜索樹深度解析:從原理實現到算法應用----《Hello C++ Wrold!》(18)--(C/C++)

文章目錄前言二叉搜索樹&#xff08;二叉排序樹或二叉查找樹&#xff09;二叉搜索樹的模擬實現二叉搜索樹和有序數組二分查找的比較兩個搜索模型作業部分前言 二叉搜索樹&#xff08;Binary Search Tree&#xff0c;簡稱 BST&#xff09;作為一種重要的樹形數據結構&#xff0…

牛客.空調遙控二分查找牛客.kotori和氣球(數學問題)力扣.二叉樹的最大路徑和牛客.主持人調度(二)

目錄 牛客.空調遙控 二分查找 牛客.kotori和氣球&#xff08;數學問題) 力扣.二叉樹的最大路徑和 牛客.主持人調度(二) 牛客.空調遙控 枚舉n個空調之后&#xff0c;使數組有序&#xff0c;左右下標&#xff0c;用二分查找&#xff0c;然后一個求 長度就好 二分查找 /二分理…

《嵌入式Linux應用編程(二):標準IO高級操作與文件流定位實戰》

今日學習內容1. 行輸入函數安全實踐(1) fgets vs gets函數安全特性換行符處理緩沖區保護fgets指定讀取長度&#xff08;size-1&#xff09;保留\n并添加\0安全&#xff08;防溢出&#xff09;gets無長度限制將\n替換為\0危險2. Linux標準文件流文件流符號設備 標準輸入stdin鍵盤…

Springboot2+vue2+uniapp 小程序端實現搜索聯想自動補全功能

目錄 一、實現目標 1.1 需求 1.2 實現示例圖: 二、實現步驟 2.1 實現方法簡述 2.2 簡單科普 2.3 實現步驟及代碼 一、實現目標 1.1 需求 搜索聯想——自動補全 &#xff08;1&#xff09;實現搜索輸入框&#xff0c;用戶輸入時能顯示模糊匹配結果 &am…

極簡 5 步:Ubuntu+RTX4090 源碼編譯 vLLM

極簡 5 步&#xff1a;UbuntuRTX4090 源碼編譯 vLLM1. 系統依賴&#xff08;一次性&#xff09;2. 進入源碼目錄 & 激活環境3. 啟用 ccache 自動并行度4. 拉代碼 編譯&#xff08;2 行搞定&#xff09;5. 更新 flash-attn&#xff08;與 vLLM 配套&#xff09;6. 啟動 4 …

生產工具革命:定制開發開源AI智能名片S2B2C商城小程序重構商業生態的范式研究

摘要互聯網作為信息工具已深刻改變商業生態&#xff0c;但其本質仍停留在效率優化層面。本文提出&#xff0c;基于定制開發開源AI智能名片與S2B2C商城小程序的深度融合&#xff0c;正在引發生產工具層面的革命性變革。該技術架構通過重構"人-貨-場"關系&#xff0c;實…

Transformer前傳:Seq2Seq與注意力機制Attention

前言 參考了以下大佬的博客 https://blog.csdn.net/v_july_v/article/details/127411638 https://blog.csdn.net/andy_shenzl/article/details/140146699 https://blog.csdn.net/weixin_42475060/article/details/121101749 https://blog.csdn.net/weixin_43334693/article/det…

企業架構工具篇之ArchiMate的HelloWorld(2)

本文通過ArchiMate做一個員工報銷流程設計的小demo,按照步驟都可以做出來,在做這個demo之前先簡單認識下Archimate的開發界面: 模型樹(Models)窗口:通常位于左上方,以樹形結構展示一個或多個 ArchiMate 模型。用戶可在此瀏覽模型的整體結構,快速定位到特定的模型元素,…

Docker 詳解(保姆級安裝+配置+使用教程)

文章目錄一、初識 Docker二、Docker 命令1、安裝2、配置鏡像加速器檢查配置是否生效3、服務相關命令4、鏡像相關命令5、容器相關命令三、Docker 容器數據卷1、數據卷概念2、數據卷作用3、配置數據卷4、配置數據卷容器四、Docker 應用部署五、備份與遷移六、Dockerfile七、Docke…

做調度作業提交過程簡單介紹一下

?作業提交與執行流程前文提到在 Linux 的 HPC 或超算環境中&#xff0c;可以只在共享存儲上安裝一次應用程序&#xff0c;然后所有計算節點通過掛載共享目錄來訪問和執行這些程序&#xff0c;那么作業提交及執行過程是怎么樣的流程呢&#xff1f;結構說明&#xff1a;第一行是…

【Altium designer】解決報錯“Access violation at address...“

問題現象如上AD9原理圖工程所示報錯&#xff0c;當我關閉這個“CMM-WEIER-VA”原理圖工程以及其他不相關的原理圖工程出現報錯&#xff1a;Access violation at address 0832A5EC in module WorkspaceManager.DLL. Read of address 00000061 at 0832A5EC&#xff0c;任務管理器…

小杰python高級(three day)——numpy庫

1.numpy數組的操作&#xff08;1&#xff09;數組的連接stack該函數可以實現多個數組的堆疊(連接)&#xff0c;會創建新的軸&#xff0c;用于沿著新的軸連接一系列數組&#xff0c;所有數組必須具有相同的形狀。可以增加數組的維度。假設輸入的每個數組都是 n 維數組&#xff0…

視頻剪輯的工作流程

準備素材 1.準備音頻&#xff0c;視頻、圖片等素材 2.準備Pr創建的序列、彩條、字母、倒計時片頭等功能性素材 創建項目 創建項目是詩篇剪輯的第一步&#xff0c;創建一個指定名稱與存放位置的項目文件&#xff0c;用來通義管理整個視頻項目創建序列 序列決定剪輯的尺寸、幀速率…

下一個排列 的 思路總結

文章目錄思路分析&#xff1a; 倒序遍歷&#xff1a;題目要求的是下一個排列&#xff0c;那么肯定數字的跳躍不能太大&#xff0c;所以可以比較好確定的是&#xff0c;遍歷的順序是倒序遍歷比較方向&#xff1a;對于每一個數字&#xff0c;需要找到右邊最大的比它小的數字&…

Spring Cloud-面試題(49)

摘要&#xff1a; 1、通俗易懂&#xff0c;適合小白 2、僅做面試復習用&#xff0c;部分來源網絡&#xff0c;博文免費&#xff0c;知識無價&#xff0c;侵權請聯系&#xff01; 1. 什么是Spring Cloud框架&#xff1f;子項目哪幾大類&#xff1f; Spring Cloud是一套分布式系…

資源查看-iostat命令

文章目錄 系統中未安裝 iostat 命令 1. 監控CPU與磁盤的基礎負載 2. 診斷I/O性能瓶頸 3. 實時監控與動態采樣 4. 特定設備或分區的精細化監控 5. 性能測試與基準數據生成 6. 結合其他工具進行綜合調優 總結 結果輸出速查表 第一部分:CPU統計信息 第二部分:設備/磁盤統計信息(…

STM32 HAL庫外設編程學習筆記

STM32 HAL庫外設編程 1. 概述 本文檔是基于STM32 HAL庫的外設編程學習筆記&#xff0c;主要包括以下外設的配置和使用方法&#xff1a; GPIO&#xff1a;通用輸入輸出接口ADC&#xff1a;模數轉換器UART&#xff1a;通用異步收發器TIM&#xff1a;定時器I2C&#xff1a;內部…

DHCP服務配置與管理實戰指南

DHCP 服務配置與管理筆記 一、DHCP 核心概念 1. DHCP 定義與功能 DHCP (Dynamic Host Configuration Protocol)&#xff1a;動態主機配置協議核心功能&#xff1a; 自動分配 IP 地址提供子網掩碼、網關、DNS 等網絡參數管理 IP 地址租約周期 典型應用&#xff1a;ADSL撥號、企業…

WebSocket 在多線程環境下處理 Session并發

WebSocket 在多線程環境下處理 Session并發時&#xff0c;常見問題包括狀態沖突&#xff08;如 IllegalStateException&#xff09;、消息亂序、連接超時等。以下是綜合各技術方案的解決方案&#xff0c;分為單機多線程和分布式集群兩類場景&#xff1a;&#x1f512; 一、單機…