【歸并排序】 詳細解析 動圖演示 逐圖解析 洛谷P1177【模板】排序 sort【快速排序】

文章目錄

    • 歸并排序
      • 1.歸并排序的復雜度分析
      • 2.細節解釋
      • 3.歸并排序動圖演示
        • 3(1) 我們的拆分過程如下↓
      • 4.code↓
    • 洛谷P1177【模板】排序
      • 數據規模與約定
      • code(歸并排序)↓
      • code(sort排序【快速排序】)
    • 完結撒花( ̄▽ ̄) /

歸并排序

歸并排序(merge sort)是高效的基于比較的穩定排序算法。

1.歸并排序的復雜度分析

歸并排序的時間復雜度 O ( n l o g n ) O(nlogn) O(nlogn)

歸并排序的空間復雜度 O ( n ) O(n) O(n)(這是因為他不是原地排序算法

2.細節解釋

( l + r ) > > 1 = ( l + r ) ÷ 2 1 = ( l + r ) ÷ 2 (l+r)>>1=(l+r)\div 2^{1}=(l+r)\div 2 (l+r)>>1=(l+r)÷21=(l+r)÷2;

3.歸并排序動圖演示

在這里我們是默認了它以中間為節點分別排成了從大到小兩個序列

這是因為有merge_sort(q,l,mid),merge_sort(q,mid+1,r)不斷進行拆分的原因

3(1) 我們的拆分過程如下↓

在這里插入圖片描述

這里的動圖演示先執行了下方代碼

	int k=0,i=l,j=mid+1;//i表示左半邊的開始,j表示右半邊的開始,k表示合并的個數while(i<=mid&&j<=r){//對半分后,mid是i的終點,r是j的終點if(q[i]<=q[j])  tmp[k++]=q[i++];//不斷將tmp填充,i++else tmp[k++]=q[j++];//else 等同于if(q[i]>q[j]) }

q[i]q[j]已經超過了他們的終點i終點midj終點r),那么就執行下方代碼

	while(i<=mid) tmp[k++]=q[i++];//將i沒有填充完的繼續進行填充while(j<=r) tmp[k++]=q[j++];//將j沒有填充完的繼續進行填充

執行上方代碼時一定有一個值(i or j) 是已經超過了他們的終點的,不然不會退出循環,所以不用考慮大小關系

執行上方代碼是為了將剩下的可以填充的數填充進tmp數組里,以此來保證沒有遺漏

動圖演示↓
在這里插入圖片描述

4.code↓

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n,a[maxn] ,tmp[maxn];
void merge_sort(int q[],int l,int r){//要排序的數組,左邊界,有邊界if(l>=r) return;//不滿足要求int mid=(l+r)>>1;//m是l+r的中間值,(l+r)>>1=(l+r)/(2^{1})=(l+r)/2;merge_sort(q,l,mid),merge_sort(q,mid+1,r);//不斷將它進行拆分,然后歸并int k=0,i=l,j=mid+1;//i表示左半邊的開始,j表示右半邊的開始,k表示合并的個數while(i<=mid&&j<=r){//對半分后,mid是i的終點,r是j的終點if(q[i]<=q[j])  tmp[k++]=q[i++];//不斷將tmp填充,i++else tmp[k++]=q[j++];//else 等同于if(q[i]>q[j]) }while(i<=mid) tmp[k++]=q[i++];//將i沒有填充完的繼續進行填充while(j<=r) tmp[k++]=q[j++];//將j沒有填充完的繼續進行填充for(int i=l,j=0;i<=r;i++,j++){q[i]=tmp[j];//將已經排好序的(tmp[l]~tmp[r])給賦值到q數組}
}
int main(){ios::sync_with_stdio(false);//加速cincin.tie(0),cout.tie(0);cin>>n;for(int i=0;i<n;i++){cin>>a[i];//輸入數列}merge_sort(a,0,n-1);//進行排序for(int i=0;i<n;i++){cout<<a[i]<<" ";//進行排好序了的進行輸出}return 0;
}

洛谷P1177【模板】排序

題意:將讀入的 N N N個數從小到大排序后輸出

數據規模與約定

對于 20 % 20\% 20% 的數據,有 1 ≤ N ≤ 1 0 3 1 \leq N \leq 10^3 1N103

對于 100 % 100\% 100% 的數據,有 1 ≤ N ≤ 1 0 5 1 \leq N \leq 10^5 1N105 1 ≤ a i ≤ 1 0 9 1 \le a_i \le 10^9 1ai?109

code(歸并排序)↓

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n,a[maxn] ,tmp[maxn];
void merge_sort(int q[],int l,int r){if(l>=r) return;int mid=(l+r)>>1;merge_sort(q,l,mid),merge_sort(q,mid+1,r);int k=0,i=l,j=mid+1;while(i<=mid&&j<=r){if(q[i]<=q[j])  tmp[k++]=q[i++];else tmp[k++]=q[j++];}while(i<=mid) tmp[k++]=q[i++];while(j<=r) tmp[k++]=q[j++];for(int i=l,j=0;i<=r;i++,j++){q[i]=tmp[j];}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n;for(int i=0;i<n;i++){cin>>a[i];}merge_sort(a,0,n-1);for(int i=0;i<n;i++){cout<<a[i]<<" ";}return 0;
}

code(sort排序【快速排序】)

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,a[maxn]={};
int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];sort(a,a+1+n);for(int i=1;i<=n;i++) cout<<a[i]<<" ";return 0;
}

完結撒花( ̄▽ ̄) /

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

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

相關文章

閱讀筆記 | REFORMER: THE EFFICIENT TRANSFORMER

閱讀論文&#xff1a; Kitaev, Nikita, ?ukasz Kaiser, and Anselm Levskaya. “Reformer: The efficient transformer.” arXiv preprint arXiv:2001.04451 (2020). 背景與動機 這篇論文發表較早&#xff0c;主要關注Transformer的效率問題。標準的Transformer模型在許多自然…

數據中臺:數字中國戰略關鍵技術實施

這里寫目錄標題 前言為何要建設數據中臺數據中臺建設痛點數據中臺學習資料聚焦前沿&#xff0c;方法論體系更新與時俱進&#xff0c;緊跟時代熱點深入6大行業&#xff0c;提煉實踐精華大咖推薦&#xff0c;數字化轉型必備案頭書 前言 在數字中國這一國家戰略的牽引下&#xff0…

測試基礎|質量保障體系從1到N的思考

在2023年,重點構建了團隊的質量保障體系,基本完成了從0到1的過程積累,也在多個不同的場合做了相關的分享,收獲了很多同行給的建議和意見。今年的首個工作目標是把這套質量保障體系運營好,去覆蓋更多的團隊,完成從1到N的過程,讓更多的團隊從這個質量體系中獲益,保障基本…

Node插件開發(1)-快速入門

在使用Electron開發客戶端時&#xff0c;如果現有Node模塊所提供的功能無法滿足需求&#xff0c;我們可以使用C開發自定義的Node模塊&#xff0c;也稱插件&#xff08;addon&#xff09;。 Node.js插件的擴展名為.node&#xff0c;是二進制文件&#xff0c;其本質上是動態鏈接…

基于springboot+vue的響應式企業員工績效考評系統(源碼+論文)

文章目錄 前言 一、功能設計 1 普通員工功能 2 主管功能 3 系統管理員功能 4 評分標準功能 5 PC端與手機端 6 制圖 二、功能實現 普通員工 1普通員工登錄 2公告板塊 3日志板塊 主管 1主管登錄 2公告板塊 3日志板塊 4績效評分板塊 5個人信息板塊 系統管理員…

TypeScript 日期格式化工具方法

工具方法 創建工具文件&#xff1a;util.ts /*** 獲取時間并格式化函數* param M 格式模板 如: YYYY-MM-DD ...* param Time 可選傳入時間參數 默認為 Now*/ export const getFormatDate (M: string, Time: Date | null | string | number null) > {let date: Date Tim…

在 Linux 環境下安裝 Kibana

目錄 一、Kibana 是什么 二、在 Linux 環境下安裝 Kibana 1、下載安裝包 2、解壓 3、修改 Kibana的配置文件 config/kibana.yml 4、啟動 5、瀏覽器登錄 Kibana 6、測試查詢 一、Kibana 是什么 Kibana 是通向 Elastic 產品集的窗口。 它可以在 Elasticsearch 中對數據進…

品牌推廣的兩種飛輪:非酋飛輪與歐皇飛輪

在品牌推廣的世界里&#xff0c;存在著兩種截然不同的飛輪效應&#xff0c;我們稱之為“非酋飛輪”與“歐皇飛輪”。這兩種飛輪象征著品牌發展的兩種不同路徑和策略&#xff0c;而迅騰文化則以其獨特的“繁”的原則&#xff0c;巧妙地將這兩種飛輪結合&#xff0c;助力品牌形成…

Linux安裝JumpServer并結合內網穿透實現公網訪問本地服務

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

Kubernetes 學習總結(46)—— Pod 不停重啟問題分析與解決

我們在做性能測試的時候&#xff0c;往往會發現我們的pod服務&#xff0c;頻繁重啟&#xff0c;通過kubectl get pods 命令&#xff0c;我們來逐步定位問題。 現象:running的pod&#xff0c;短時間內重啟次數太多。 定位問題方法:查看pod日志 kubectl get event …

【Element】實現基于 Element UI el-tabs 的左右滑動動畫

實現基于 Element UI el-tabs 的左右滑動動畫 引言 在構建現代 web 應用時&#xff0c;為用戶提供平滑的動畫效果是提升用戶體驗的關鍵。本篇博客將詳細介紹如何在使用 Vue 以及 Element UI 時&#xff0c;實現一個具有左右滑動效果的 tab 切換動畫。 使用 el-tabs 創建 tab…

Flutter 中的 SliverGrid 和 GridView:區別與使用場景

在 Flutter 中&#xff0c;SliverGrid 和 GridView 都是用于展示網格布局的組件&#xff0c;但它們有著不同的特點和適用場景。本文將介紹它們之間的區別以及在實際開發中的使用場景。 SliverGrid 和 GridView 的區別 SliverGrid&#xff1a; SliverGrid 是 CustomScrollView …

第十五屆藍橋杯第三期模擬賽題單

目錄 第一題&#xff1a; 第二題&#xff1a; 第三題&#xff1a; 第四題: 第五題&#xff1a; 第六題&#xff1a; 第七題 第八題 第九題 第十題 第一題 【問題描述】 請問 2023 有多少個約數&#xff1f;即有多少個正整數&#xff0c;使得 2023 是這個正整數的整數倍…

FolkMQ 是怎樣進行消息的事務處理?

FolkMQ 提供了二段式提交的事務提交的機制&#xff08;TCC 模型&#xff09;。允許生產者在發送消息時綁定到一個事務中并接收事務的管理&#xff0c;以確保消息的原子性&#xff08;要么全成功&#xff0c;要么全失敗&#xff09;。在 FolkMQ 中&#xff0c;事務是通過 MqTran…

1、EmlogCms代碼審計

一、SQL注入 1、后臺標簽刪除處存在1處sql注入 漏洞條件 ● 漏洞url: http://emlog6.0.com/admin/tag.php?actiondell_all_tag ● 漏洞參數&#xff1a;tag[xx] ● 是否存在限制&#xff1a;無 ● 是否還有其他條件&#xff1a;actiondell_all_tag,token復現 POST /admin…

擼chatgpt3.5 api backend-api 對接wxbot

功能是實現 web 轉api 對接wxbot用&#xff0c; 直接上代碼&#xff0c; 1.獲取wss url def get_register_websocket():# 請求頭url "https://chat.openai.com/backend-api/register-websocket"payload {}headers {Authorization: Bearer eyJhbGxxxxxxxxxxxxx…

docker的網絡配置

文章目錄 1、網絡模式1.1、bridge模式(默認模式)1.2、host模式 2、bridge模式3、自定義網絡 1、網絡模式 Docker在創建容器時有四種網絡模式&#xff1a;bridge/host/container/none&#xff0c;bridge為默認不需要用–net去指定&#xff0c;其他三種模式需要在創建容器時使用…

【力扣 - 最長連續數組】

題目描述 給定一個未排序的整數數組 nums &#xff0c;找出數字連續的最長序列&#xff08;不要求序列元素在原數組中連續&#xff09;的長度。 請你設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 1&#xff1a; 輸入&#xff1a;nums [100,4,200,1,3,2] 輸出&…

Linux命令:uniq命令和wc命令

目錄 1 uniq命令1.1 uniq簡介1.2說明1.3案例1、默認輸出2、輸出重復行3、比較一行中的部分字符4、忽略大小寫5、只顯示唯一的行 2.4 uniq和sort命令配合使用1、文本統計2、統計IP連接數并排序 2 wc命令2.1 wc簡介2.2 說明2.3 案例1、默認輸出2、輸出字節、字符數、單詞數 總結 …

案例介紹:汽車維修系統的信息抽取技術與數據治理應用(開源)

一、引言 在當今汽車產業的快速發展中&#xff0c;軟件已經成為提升車輛性能、安全性和用戶體驗的關鍵因素。從車載操作系統到智能駕駛輔助系統&#xff0c;軟件技術的進步正在重塑我們對汽車的傳統認知。我有幸參與了一個創新項目&#xff0c;該項目專注于開發和集成先進的汽…