數據結構 -- 交換排序(冒泡排序和快速排序)

冒泡排序

基于“交換”的排序:根據序列中兩個元素關鍵字的比較結果來對換這兩個記錄在序列中的位置

//交換
void swap(int &a,int &b){int temp = a;a = b;b = temp;
}//冒泡排序
void BubbleSort(int A[],int n){for(int i=0;i<n-1;i++){bool flag = false;			//表示本趟冒泡是否發生交換的標志for(int j = n-1;j>i;j--)if(A[j-1]>A[j]){swap(A[j-1],A[j]);flag = true;}if(flag == false)	return ;		//本趟遍歷后沒有發生交換,說明表已經有序}
}
算法性能分析

在這里插入圖片描述

是否適用于鏈表?

適用,可從前往后“冒泡”,每?趟將更?的元素“冒”到鏈尾

在這里插入圖片描述

快速排序

算法思想

在這里插入圖片描述

image-20250513113311757
//用第一個元素將待排序元素劃分為左右兩個部分
int Partition(int A[],int low,int high){int pivot = A[low];while(low<high){while(low<high&&A[high]>=pivot)	--high;A[low] = A[high];while(low<high&&A[low]<=pivot)	++low;A[high] = A[low];}A[low] = pivot;return low;
}//快速排序
void QuickSort(int A[],int low,int high){if(low<high){int pivotpos = Partition(A,low,high);QuickSort(A,low,pivotpos);QuickSort(A,pivotpos,high);}
}
算法效率分析

時間復雜度=O(n*遞歸層數)

空間復雜度=O(遞歸層數)

在這里插入圖片描述
在這里插入圖片描述

時間復雜度空間復雜度
最好O(nlog2n)O(log2n)
最壞O(n2)O(n)

若每?次選中的“樞軸”將待排序序列劃分為很不均勻的兩個部分,則會導致遞歸深度增加,算法效率變低

若初始序列有序或逆序,則快速排序的性能最差(因為每次選擇的都是最靠邊的元素)

若每?次選中的“樞軸”將待排序序列劃分為均勻的兩個部分,則遞歸深度最?,算法效率最?

快速排序算法優化思路:盡量選擇可以把數據中分的樞軸元素。

eg:①選頭、中、尾三個位置的元素,取中間值作為樞軸元素;②隨機選?個元素作為樞軸元素

在這里插入圖片描述

注:408原題中說,對所有尚未確定最終位置的所有元素進行?遍處理稱為“?趟”排序,因此?次“劃分”≠?趟排序。

?次劃分可以確定?個元素的最終位置,而?趟排序也許可以確定多個元素的最終位置。

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

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

相關文章

多模態AI終極形態?GPT-5與Stable Diffusion 3的融合實驗報告

多模態AI終極形態&#xff1f;GPT-5與Stable Diffusion 3的融合實驗報告 系統化學習人工智能網站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目錄 多模態AI終極形態&#xff1f;GPT-5與Stable Diffusion 3的融合實驗報告摘要引言技術架構對…

ajax中get和post的區別,datatype返回的數據類型有哪些?

GET 請求 和 POST 請求 是 HTTP 協議中常用的兩種請求方法&#xff0c;它們主要的區別在于&#xff1a; GET 請求&#xff1a; 數據傳輸方式&#xff1a;數據通過 URL 傳遞&#xff0c;通常是附加在 URL 后面的查詢字符串中&#xff0c;例如 https://example.com/page?nameJoh…

101 alpha_59

(0 - (1 * (rank((sum(returns, 10) / sum(sum(returns, 2), 3))) * rank((returns * cap))))) 0 - (1 * A * B) A rank((sum(returns, 10) / sum(sum(returns, 2), 3)))B rank((returns * cap)) sum(returns, 10)&#xff1a;計算過去 10 期收益率的總和sum(returns, 2)&…

vscode里幾種程序調試配置

標題調試python嵌入的c代碼,例如 import torch from torch.utils.cpp_extension import loadtest_load load(nametest_load, sources[test.cpp],extra_cflags[-O0, -g],#extra_cflags[-O1],verboseTrue, ) a torch.tensor([1, 2, 3]) b torch.tensor([4, 5, 6]) result te…

深入解析MySQL中的HAVING關鍵字:從入門到實戰

引言 在SQL查詢中&#xff0c;數據過濾是核心操作之一。我們常用WHERE子句進行行級過濾&#xff0c;但當需要對分組后的結果進行條件篩選時&#xff0c;HAVING關鍵字便成為不可或缺的工具。本文將深入探討HAVING的作用、使用場景及其與WHERE的區別&#xff0c;并通過實際案例幫…

根據YOLO數據集標簽計算檢測框內目標面積占比(YOLO7-10都適用)

程序&#xff1a; 路徑改成自己的&#xff0c;閾值可以修改也可以默認 #zhouzhichao #25年5月17日 #計算時頻圖中信號面積占檢測框面積的比值import os import numpy as np import pandas as pd from PIL import Image# Define the path to the directory containing the lab…

AI神經網絡降噪 vs 傳統單/雙麥克風降噪的核心優勢對比

1. 降噪原理的本質差異 對比維度傳統單/雙麥克風降噪AI神經網絡降噪技術基礎基于固定規則的信號處理&#xff08;如譜減法、維納濾波&#xff09;基于深度學習的動態建模&#xff08;DNN/CNN/Transformer&#xff09;噪聲樣本依賴預設有限噪聲類型訓練數據覆蓋數十萬種真實環境…

了解Android studio 初學者零基礎推薦(3)

kotlin中的數據類及對象 使用泛型創建可重復使用的類 我們將常在線答題考試&#xff0c;有的考試題型包括判斷&#xff0c;或者填空&#xff0c;以及數學題&#xff0c;此外試題內容還包括難易程度&#xff1a;"easy”,"medium"&#xff0c;"hard",…

【占融數科-注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞…

記錄一次請求數據很慢的災難

起因&#xff1a; 因公司業務需要&#xff0c;對接了一個平臺的 api。對接完成之后&#xff0c;發現只要打開開關&#xff0c;就別的接口就訪問很慢&#xff0c;出現 gatway time out。 排查&#xff1a; 先看下主服務器和 slave 服務器的狀態&#xff1a; 主服務&#xff…

力扣-將x減到0的最小操作數

1.題目描述 2.題目鏈接 1658. 將 x 減到 0 的最小操作數 - 力扣&#xff08;LeetCode&#xff09; 3.題目分析 1&#xff09;正面求解困難 題目要求我們每次都從最左邊或者最右邊取一個數&#xff0c;使x-元素的值&#xff0c;并在數組中移除該元素。最后返回的最小操作數…

排序復習/上(C語言版)

目錄 1.排序概念 2.冒泡排序 效率性能測試代碼&#xff1a; 性能分析&#xff1a; 3.直接插入排序 單趟&#xff1a; 整體&#xff1a; 性能分析&#xff1a; 4.希爾排序&#xff08;基于插入排序的優化&#xff09; 單趟單組&#xff1a; 單趟多組&#xff1a; 降低…

程序編輯器快捷鍵總結

程序編輯器快捷鍵總結 函數跳轉 函數跳轉 Creator : F2VSCode : F12visual Studio : F12

【LUT技術專題】極小尺寸LUT算法:TinyLUT

TinyLUT: Tiny Look-Up Table for Efficient Image Restoration at the Edge&#xff08;2024 NeurIPS&#xff09; 專題介紹一、研究背景二、TinyLUT方法2.1 Separable Mapping Strategy2.2 Dynamic Discretization Mechanism 三、實驗結果四、總結 本文將從頭開始對TinyLUT: …

解決:VMware 虛擬機 Ubuntu 系統共享文件夾無法訪問問題

以下是解決 VMware 虛擬機 Ubuntu 系統共享文件夾無法訪問 問題的完整過程總結&#xff0c;按關鍵步驟和邏輯順序梳理&#xff1a; 系統版本&#xff1a;Ubuntu 22.04.5 1. 確認 VMware Tools 已安裝 驗證方法&#xff1a;通過 ps -ef | grep vmtoolsd 檢查是否存在 vmtools…

YOLOv8 的雙 Backbone 架構:解鎖目標檢測新性能

一、開篇&#xff1a;為何踏上雙 Backbone 探索之路 在目標檢測的領域中&#xff0c;YOLOv8 憑借其高效與精準脫穎而出&#xff0c;成為眾多開發者和研究者的得力工具。然而&#xff0c;傳統的單 Backbone 架構&#xff0c;盡管已經在諸多場景中表現出色&#xff0c;但仍存在一…

k8s網絡架構

Kubernetes 網絡架構的設計目標是為 Pod 提供一個高效、靈活且可擴展的網絡環境&#xff0c;同時確保 Pod 之間的通信簡單直接&#xff0c;類似于在同一個物理網絡中。以下是 Kubernetes 網絡架構的原理和核心組件的詳細解析&#xff1a; 一、Kubernetes 網絡模型的基本原則 Ku…

C++高頻面試考點 -- 智能指針

C高頻面試考點 – 智能指針 C11中引入智能指針的概念&#xff0c;方便堆內存管理。這是因為使用普通指針&#xff0c;容易造成堆內存泄漏&#xff0c;二次釋放&#xff0c;程序發生異常時內存泄漏等問題。 智能指針在C11版本之后提供&#xff0c;包含在頭文件<memory>中…

JavaScript關鍵字完全解析:從入門到精通

前言 JavaScript作為目前最流行的編程語言之一&#xff0c;擁有豐富的關鍵字體系。這些關鍵字是語言的基礎組成部分&#xff0c;理解它們的含義和用法對于掌握JavaScript至關重要。本文將詳細介紹JavaScript中的所有關鍵字&#xff0c;包括ES6的新增關鍵字&#xff0c;幫助開發…

#6 百日計劃第六天 java全棧學習

今天學的啥 上午 算法byd圖論 圖遍歷dfs bfs 沒學懂呵呵 找到兩個良心up 圖碼 labuladong 看算法還好 尚硅谷講的太淺了 那你問我 下午呢 下午 java 看了會廖雪峰的教程 回顧基礎 小林coding Java基礎八股文 還有集合的八股文 有的不是很懂 今天把Java基礎算是完…