【algorithm】算法基礎課---排序算法(附筆記 | 建議收藏)

🚀write in front🚀
📝個人主頁:認真寫博客的夏目淺石.
🎁歡迎各位→點贊👍 + 收藏?? + 留言📝
📣系列專欄:AcWing算法學習筆記
💬總結:希望你看完之后,能對你有所幫助,不足請指正!共同學習交流 🖊
??如果無聊的話,就來逛逛我的博客棧吧stack-frame.cn

文章目錄

  • 前言
  • 一、快速排序
    • 1.1快速排序的知識講解
    • 1.2快速排序的習題講解
    • 1.3對于快排的總結
  • 二、歸并排序
    • 2.1歸并排序的知識講解
    • 2.2歸并排序的習題講解
    • 2.3對于歸并的總結
  • 總結


前言

在這里插入圖片描述

之前其實做過關于快速排序以及歸并排序的博客筆記,但是我覺得我講解的是不到位,所以我打算重新寫一篇博客來幫助自己和大家梳理一下這兩個算法模板以及配套的習題。


其實就是把元素放到x的兩側

一、快速排序

1.1快速排序的知識講解

快速排序的核心思想基于分治
快速排序主要的內容就是:

  • 確定分界點:q[L],q[(L+R)/2],q[R] 其實就是分為左邊界,中間值和右邊界,甚至隨機一個數

  • 調整區間,其實就是把元素放到x的兩側

  • 遞歸處理左右兩段
    在這里插入圖片描述
    下面就是具體講解步驟二的調整區間
    在這里插入圖片描述

  • 兩個指針,i,j不斷在這里面移動

  • 當指針i指向的元素<=x的時候就指針向右移動同理指針j遇到>=x的時候就指針向左移動

  • 當i指針指向的元素>=x的時候停下來,等到j指針指向的元素<=x的時候就也停下來

  • 最后使得這兩個元素進行swap交換一下

在這里插入圖片描述
以上就是快速排序的基礎知識啦,下面就要講解一些習題來鞏固和練習我們所講解的知識點啦

快排思想圖:
在這里插入圖片描述

1.2快速排序的習題講解

在這里插入圖片描述
C語言實現:

#include<stdio.h>
int arr[100010];void quick_sort(int arr[],int l,int r)
{if(l>=r) return;int i=l-1,j=l+1,x=arr[l];while(i<j){do i++;while(arr[i]>x);do j--;while(arr[j]<x);if(i<j){int tmp=arr[i];arr[i]=arr[j];arr[j]=tmp;}}quick_sort(arr,l,j);quick_sort(arr,j+1,r);}int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++) scanf("%d",&arr[i]);quick_sort(arr,0,n-1);for(int i=0;i<n;i++) printf("%d ",arr[i]);return 0;
}

C++實現:

#include <iostream>using namespace std;const int N = 1000010;int q[N];void quick_sort(int q[],int l,int r)
{if (l>=r) return;int i=l-1, j=r+1,x=q[l+r>>1];while (i<j){do i++; while (q[i]<x);do j--; while (q[j]>x);if (i<j) swap(q[i], q[j]);}quick_sort(q,l,j);quick_sort(q,j + 1,r);
}int main()
{int n;scanf("%d", &n);for (int i=0; i<n; i++) scanf("%d", &q[i]);quick_sort(q,0,n-1);for (int i=0; i<n;i ++) printf("%d ", q[i]);return 0;
}

在這里插入圖片描述

#include<stdio.h>
void quick_sort(int arr[],int l,int r)
{if(l>=r) return;int i=l-1,j=r+1,x=arr[l];while(i<j){do i++;while(arr[i]<x);do j--;while(arr[j]>x);if(i<j){int tmp=arr[i];arr[i]=arr[j];arr[j]=tmp;}}quick_sort(arr,l,j);quick_sort(arr,j+1,r);
}
int main()
{int arr[100010];int n,k;scanf("%d %d",&n,&k);for(int i=0;i<n;i++) scanf("%d",&arr[i]);quick_sort(arr,0,n-1);for(int i=0;i<n;i++) {if(i+1==k) printf("%d",arr[i]);}return 0;
}

其實C++和這個差不多,這里不再贅述了。

1.3對于快排的總結

其實就是自己要多練習幾遍,反復敲打上幾次就可以啦,然后隔一段時間再寫一次看看自己是否可以再次寫出來這個模板。

二、歸并排序

2.1歸并排序的知識講解

歸并排序的核心思想基于分治
歸并排序主要的內容就是:

  • 確定分界點mid=(left+right)/2
  • 遞歸排序left,right
  • 歸并,合二為一
    在這里插入圖片描述
    下面就講解一下,歸并排序的大致思路
  • 先比較兩個指針所指向的元素誰大誰小
  • 誰小就拿下來放到新的保存數組里面,然后指針向后挪動一位依次類推
  • 直到其中一個指針走向了終點的位置為止,就可以把沒有走完的直接補充到我們的保存數組里面

在這里插入圖片描述
歸并排序的原理動圖:
在這里插入圖片描述

2.2歸并排序的習題講解

在這里插入圖片描述

#include<stdio.h>
const int N=100010;
int arr[N],tmp[N];void merge_sprt(int arr[],int l,int r)
{if(l>=r) return;int mid=(l+r)/2;merge_sprt(arr,l,mid),merge_sprt(arr,mid+1,r);int i=l,j=mid+1,k=0;while(i<=mid&&j<=r){if(arr[i]<=arr[j]) tmp[k++]=arr[i++];else tmp[k++]=arr[j++];}while(i<=mid) tmp[k++]=arr[i++];while(j<=r) tmp[k++]=arr[j++];for(int i=l,j=0;i<=r;i++,j++) arr[i]=tmp[j];}
int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++) scanf("%d",&arr[i]);merge_sprt(arr,0,n-1);for(int i=0;i<n;i++) printf("%d ",arr[i]);return 0;
}

2.3對于歸并的總結

主要對于逆序對問題很重要歸并排序。

總結

今天重新寫了一篇關于AcWing算法基礎課的一篇博客,其實我第一次看的時候會覺得很難,但是今天又看了一遍,發現,簡單了很多,或許我們曾經不會的,或許以后就會慢慢掌握,希望遇到困難的時候第一想到的不是退縮和放棄,而是拼盡全力試一試看看到底自己能不能行。
在這里插入圖片描述
我是夏目淺石,希望和你一起學習進步,刷題無數!!!希望各位大佬能一鍵三連支持一下博主,hhhh~我們下期見嘍

在這里插入圖片描述
如果無聊的話,就來逛逛我的博客棧吧stack-frame.cn

? 原創不易,還希望各位大佬支持一下 \textcolor{blue}{原創不易,還希望各位大佬支持一下} 原創不易,還希望各位大佬支持一下

👍 點贊,你的認可是我創作的動力! \textcolor{9c81c1}{點贊,你的認可是我創作的動力!} 點贊,你的認可是我創作的動力!

?? 收藏,你的青睞是我努力的方向! \textcolor{ed7976}{收藏,你的青睞是我努力的方向!} 收藏,你的青睞是我努力的方向!

?? 評論,你的意見是我進步的財富! \textcolor{98c091}{評論,你的意見是我進步的財富!} 評論,你的意見是我進步的財富!

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

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

相關文章

tvm交叉編譯參考資料整理

環境 ubuntu20.04&#xff0c;ndk交叉編譯部署到adnroid手機 參考&#xff1a; TVM部署神經網絡模型到android端_tvm android-CSDN博客 使用TVM在android中進行Mobilenet SSD部署 - 知乎

深度探析低代碼:助力“數智轉型”賦能中國制造

隨著數字化和智能化技術的飛速發展&#xff0c;我國制造業正面臨著從傳統制造向智能制造的轉型升級。在這個過程中&#xff0c;低代碼技術作為一種創新性的軟件開發模式&#xff0c;逐漸成為助力我國制造業數智轉型的關鍵驅動力。本文將從低代碼技術的原理、應用場景以及在我國…

?The Sandbox的南極之旅|鏈接世界:從南極洲到元宇宙

真正的發現之旅不在于尋找新的景觀&#xff0c;而在于擁有新的眼光。 - 馬塞爾-普魯斯特 在這個數字世界和物理世界日益交織的時代&#xff0c;The Sandbox 的聯合創始人 Arthur Madrid 和 Sebastien Borget 踏上了遠離數字空間的旅程&#xff0c;前往地球上未被開發的寶藏地點…

無用工作、UBI與AI

有些隱晦和黑暗的事實無法陳述&#xff0c;因為任何的系統中“無用”的結局都是被無情的拋棄和淘汰&#xff0c;AI監督下的人類結局更是如此。 什么是無用工作&#xff1f; 無用無效工作通常指的是那些看似忙碌但實際上對社會或個人沒有實質性貢獻的工作。這類工作可能包括以下…

2024環境工程、能源系統與化學材料國際會議(ICEEESCM 2024)

2024環境工程、能源系統與化學材料國際會議&#xff08;ICEEESCM 2024) 一、【會議簡介】 2024環境工程、能源系統與化學材料國際會議&#xff08;ICEEESCM 2024)將于2024年在西安舉行。會議將圍繞環境工程、能源系統與化學材料等議題展開討論&#xff0c;旨在為從事環境工程…

ABB雙語言共享充電寶投資理財源碼/共享充電寶系統源碼/共享充電寶市場分析/五級分銷返利+地圖顯示模式

ABB雙語言共享充電寶投資理財源碼/五級分銷返利地圖顯示模式/vue編譯后前端 測試環境&#xff1a;Linux系統CentOS7.6、寶塔、PHP7.3、MySQL5.6&#xff0c;根目錄public&#xff0c;偽靜態laravel5&#xff0c; 源碼下載&#xff1a;https://download.csdn.net/download/m0_…

人臉高清算法GFPGAN之TensorRT推理

1. 綜述 最近由于做數字人項目&#xff0c;采用的是wav2lip GFPGAN進行人臉面部高清&#xff0c;但GFPGAN模型本身比較大&#xff0c;所以想著使用TensorRT來代替原始的pth推理看看能否提升運行速度&#xff0c;于是便開始了這趟windows1之下進行GFPGAN的trt推理的折騰之旅。…

varFormatter 數據格式化庫 以性能優先的 快速的 內存對象格式轉換

varFormatter 數據格式化 技術 開源技術欄 對象/變量格式化工具庫&#xff0c;其支持將一個對象進行按照 JSON XML HTML 等格式進行轉換&#xff0c;并獲取到結果字符串&#xff01; 目錄 文章目錄 varFormatter 數據格式化 技術目錄介紹獲取方式 使用實例格式化組件的基本使…

圖書推薦||Word文稿之美

讓你的文檔從平凡到出眾&#xff01; 本書內容 《Word文稿之美》是一本全面介紹Word排版技巧和應用的實用指南。從初步認識數字排版到高效利用模板、圖文配置和表格與圖表的排版技巧&#xff0c;再到快速修正錯誤和保護文件&#xff0c;全面系統地講解數字排版的技術和能力&…

靶機滲透之My File Server: 1

Name: My File Server: 1Date release: 21 Feb 2020Author: Akanksha Sachin VermaSeries: My File ServerDownload: https://drive.google.com/uc?id1w0grAomPuFaIohBcUwDiI3QIi4fj4kje&exportdownload 對于vulnhub中的靶機&#xff0c;我們都需先下載鏡像&#xff0c;然…

Redis 在 Linux 系統下安裝部署的兩種方式詳細說明

小伙伴們好&#xff0c;歡迎關注&#xff0c;一起學習&#xff0c;無限進步 Redis安裝和配置 1、首先在官網下載好redis-6.0.9.tar.gzhttp://redis.io/ 或者使用 wget 命令下載&#xff1a;wget http://download.redis.io/releases/redis-6.0.9.tar.gz 2、下載使用上傳到阿里…

Entry First Day 入職恩孚第一天

入職第一天&#xff0c;電腦還沒配置好就去了工廠。 熟悉了一下設備&#xff0c;切了幾個小玩意&#xff0c; hello world 一下。 了解了串行端口的Nodejs的庫 https://github.com/serialport/node-serialport&#xff0c;以后要用這個東西和硬件通訊&#xff0c;安裝&#…

css實現居中

基礎代碼&#xff1a; <div class"box"><div class"content"></div> </div> css實現居中的幾種方式&#xff1a; 1、flex布局&#xff08;水平垂直&#xff09; .box {width: 200px;height: 200px;background-color: pink;disp…

24計算機考研調劑 | 太原理工大學

太原理工大學智能光學實驗室招生2024級碩士研究生 考研調劑招生信息 學校:太原理工 專業:工學->光學工程 工學->儀器科學與技術 工學->軟件工程 工學->計算機科學與技術 工學->控制科學與工程 年級:2024 招生人數:- 招生狀態:正在招生中 聯系方式:**…

大唐杯學習筆記:Day1

1.1 5G移動通信系統 系統整體架構 { 5 G C ( 5 G 核心網 ) N G ? R A N ( 5 G 無線接入網 ) : g N B 、 n g ? e N B 系統整體架構 \begin{cases} 5GC(5G核心網)\\ NG-RAN(5G無線接入網):gNB、ng-eNB \end{cases} 系統整體架構{5GC(5G核心網)NG?RAN(5G無線接入網):gNB、ng?…

分類問題經典算法 | 二分類問題 | Logistic回歸:梯度下降

目錄 一. 損失函數1. 交叉熵損失函數2. 梯度下降 一. 損失函數 Logistic回歸算法公式推導篇中&#xff0c;我們通過對似然函數求對數&#xff0c;得到 l ( θ ) l(\theta ) l(θ)&#xff1a; l ( θ ) l n [ L ( θ ) ] ∑ i 1 M { y ( i ) l n [ h θ ( x ( i ) ) ] ( …

AI智能分析網關V4智慧環保/智慧垃圾站視頻智能分析與監控方案

一、背景介紹 隨著城市化進程的加速&#xff0c;垃圾處理問題日益受到人們的關注&#xff0c;傳統的垃圾站管理方式已經無法滿足現代社會的需求。針對當前垃圾站的監管需求&#xff0c;TSINGSEE青犀可基于旗下視頻智能檢測AI智能分析網關V4與安防監控視頻綜合管理系統EasyCVR平…

如何添加極狐GitLab Runner 信任域名證書

本文作者 徐曉偉 極狐Gitlab Runner 信任實例域名證書&#xff0c;用于注冊注冊極狐 GitLab Runner。 問題 參見 極狐gitlab-runner-host.md 說明 解決方案是使用頒發給域名 gitlab.test.helm.xuxiaowei.cn 的證書&#xff0c;可以使用自己的域名去各大云廠商免費申請&#…

TG-ADMIN 權限管理系統

項目簡介 該項目是一款基于 SpringBoot + Vue2 + Jwt + ElementUi的 RBAC模型管理系統。 主要以自定義攔截器和jwt結合進行權限驗證 通過自定義指令實現按鈕級別權限,使用經典的RBAC模型 什么是RBAC? 1、RBAC模型概述 RBAC模型(Role-Based Access Control:基于角色的…

Go語言語法基礎入門

目錄 一、開篇二、環境與配置三、Hello, World!四、變量與類型五、條件語句六、循環語句七、函數八、數組與切片九、結構體十、錯誤處理十一、結語 一、開篇 Go語言&#xff0c;作為近年來備受矚目的編程語言&#xff0c;以其高效、簡潔和強大的并發處理能力贏得了眾多開發者的…