交換排序(冒泡排序)(快速排序(1))

目錄

1.交換排序

(1)冒泡排序

(2)快速排序

1.交換排序

基本思想:所謂交換,就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置,交換排序的特點是:將鍵值較大的記錄向序列的尾部移動,鍵值較小的記錄向序列的前部移動。
(1)冒泡排序
冒泡排序的特性總結:
????????1. 冒泡排序是一種非常容易理解的排序
????????2. 時間復雜度: O(N^2)
????????3. 空間復雜度: O(1)
????????4. 穩定性:穩定
冒泡的主要思想是 一趟一趟將最大、次大等等數據排放到最后的位置:
如:(單趟)
        for (int i = 1; i < n; i++){if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);}}

放完最大的數據到達數組最后一個位置后,就可以屏蔽最后一個位置(end下標)。

即n--;

完整冒泡:

// 冒泡排序
void BubbleSort(int* a, int n)
{for (int j = 0; j < n; j++){int flag = 1;for (int i = 1; i < n - j; i++){if (a[i - 1] > a[i]){Swap(&a[i - 1], &a[i]);flag = 0;}}if (flag)break;}
}

flag標注的原因僅是防止有序時遍歷n^2;

(2)快速排序
快速排序是 Hoare 1962 年提出的一種二叉樹結構的交換排序方法,其基本思想為: 任取待排序元素序列中 的某元素作為基準值,按照該排序碼將待排序集合分割成兩子序列,左子序列中所有元素均小于基準值,右 子序列中所有元素均大于基準值,然后最左右子序列重復該過程,直到所有元素都排列在相應位置上為止

與二叉樹的思想大致類似,熟悉二叉樹的遍歷遞歸后,這塊部分理解起來就會相對容易(本人感覺還是有點難度)。

核心思想:

    while (l < r){while (l < r && a[r] >= a[keyi]){r--;}while (l < r && a[l] <= a[keyi]){l++;}Swap(&a[l], &a[r]);}

之后,可以將keyi移到中間位置,這時左邊全是比他小的數(可相等),右邊全是比他大的數(可相等),因此,就可以開始遞歸左邊和右邊,然后左邊的左邊和右邊等等,當begin >= end時,就可以return了。

完整代碼:

//快速排序
void QuickSort(int* a, int begin,int end)
{if (begin >= end)return;int keyi = begin;int l = begin;int r = end;while (l < r){while (l < r && a[r] >= a[keyi]){r--;}while (l < r && a[l] <= a[keyi]){l++;}Swap(&a[l], &a[r]);}Swap(&a[l], &a[keyi]);keyi = l; QuickSort(a, begin, keyi - 1);QuickSort(a, keyi + 1, end);
}

對代碼進行優化,可以取最左、中、最右三個值取中間大小的值最為基準值keyi,可以提高排序的效率。

即:

int GetMidi(int* a, int begin, int end)
{int midi = (begin + end) / 2;// begin end midi三個數選中位數if (a[begin] < a[midi]){if (a[midi] < a[end])return midi;else if (a[begin] > a[end])return begin;elsereturn end;}else// a[begin] >= a[midi]{if (a[midi] > a[end])return midi;else if (a[begin] < a[end])return begin;elsereturn end;}
}
//快速排序
void QuickSort(int* a, int begin,int end)
{if (begin >= end)return;int midi = GetMidi(a, begin, end);Swap(&a[midi], &a[begin]);int keyi = begin;int l = begin;int r = end;while (l < r){while (l < r && a[r] >= a[keyi]){r--;}while (l < r && a[l] <= a[keyi]){l++;}Swap(&a[l], &a[r]);}Swap(&a[l], &a[keyi]);keyi = l; QuickSort(a, begin, keyi - 1);QuickSort(a, keyi + 1, end);
}

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

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

相關文章

ambari hive on Tez引擎一直卡住

hive on tez使用./bin/hive啟動后一直卡住&#xff0c;無法進入命令行 使用TEZ作為Hive默認執行引擎時&#xff0c;需要在調用Hive CLI的時候啟動YARN應用&#xff0c;預分配資源&#xff0c;這需要花一些時間&#xff0c;而使用MapReduce作為執行引擎時是在執行語句的時候才會…

iPaaS架構深入探討

在數字化時代全面來臨之際&#xff0c;企業正面臨著前所未有的挑戰與機遇。技術的迅猛發展與數字化轉型正在徹底顛覆各行各業的格局&#xff0c;不斷推動著企業邁向新的前程。然而&#xff0c;這一數字化時代亦衍生出一系列復雜而深奧的難題&#xff1a;各異系統之間數據孤島、…

基于SuperMap iObjects Java生成地圖瓦片

作者&#xff1a;dongyx 前言 在GIS領域&#xff0c;地圖瓦片技術作為GIS領域的關鍵技術&#xff0c;是提高地圖服務性能的關鍵手段之一。通過預先生成地圖的瓦片數據&#xff0c;可以顯著提升用戶訪問地圖時的響應速度和體驗。SuperMap iObjects for Java作為一款強大的GIS開…

Docker, Docker-compose部署Sonarqube

參考文檔 鏡像地址: https://hub.docker.com/_/sonarqube/tags Docker部署文檔地址 Installing from Docker | SonarQube Docs Docker-compose文檔部署地址&#xff1a; Installing from Docker | SonarQube Docs 部署鏡像 2.1 docker部署 # 宿主機執行 $. vi /etc/sysctl.conf…

Java注解詳解

概述 注解是對程序代碼進行標注和解釋的一種方式。在Java中&#xff0c;注解提供了一種元數據形式&#xff0c;能夠在程序中嵌入有關程序的信息&#xff0c;以便進行進一步的處理。注解通過使用符號來聲明&#xff0c;如Override、Deprecated等。 注解和注釋的區別 注釋&…

Unity中Batching優化的GPU實例化(4)

文章目錄 前言一、構建需要實例化的額外數據二、在頂點著色器&#xff0c;將實例化 ID 從 appdata 存入 v2f 傳給片元著色器三、在片斷著色器中訪問具體的實例化變量三、使用代碼修改Shader材質屬性&#xff0c;實現GPU實例化后不同對象顏色不同的效果1、在C#測試腳本生成小板凳…

ReactJs筆記摘錄

前言 以前2018年搞過一段時間react antd開發&#xff0c;兜兜轉轉又回到react世界。 TODO中 Hook函數 JSX語法 根元素與斜杠 注意局部的jsx片段也要加根元素: return (<div>{items.map((item) > (// 此處只能有一個根元素!!!<>...<div className&quo…

要求CHATGPT高質量回答的藝術:提示工程技術的完整指南—第 23 章:命名實體識別提示

要求CHATGPT高質量回答的藝術&#xff1a;提示工程技術的完整指南—第 23 章&#xff1a;命名實體識別提示 命名實體識別&#xff08;NER&#xff09;是一種允許模型對文本中的命名實體&#xff08;如人物、組織、地點和日期&#xff09;進行識別和分類的技術。 要在 ChatGPT…

微前端介紹

目錄 微前端概念 微前端特性 場景演示 微前端方案 iframe 方案 qiankun 方案 micro-app 方案 EMP 方案 無界微前端 方案 無界方案 成本低 速度快 原生隔離 功能強大 總結 前言&#xff1a;微前端已經是一個非常成熟的領域了&#xff0c;但開發者不管采用哪個現…

Leetcode—290.單詞規律【簡單】

2023每日刷題&#xff08;五十一&#xff09; Leetcode—290.單詞規律 實現代碼 class Solution { public:bool wordPattern(string pattern, string s) {unordered_map<char, string> m1;unordered_map<string, char> m2;stringstream stro(s);string tmp;for(a…

(env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序

應公司需求&#xff0c;在特定情況下需要修改ip 在開發過程中出現的小插曲 1、第一種情況&#xff1a;重復聲明 2、第二種情況&#xff1a; 應官方要求&#xff0c;需要跳轉的 tabBar 頁面的路徑&#xff08;需在 pages.json 的 tabBar 字段定義的頁面&#xff09;&#xff0…

React中使用TypeScript代替prop-types

原文鏈接 公眾號-React中使用TypeScript代替prop-types 個人公眾號&#xff0c;嗚嗚嗚&#xff0c;求各位大佬們關注下&#xff0c;本人的公眾號主要寫React 跟NodeJs的 ?關于prop-types 對于部分的同學&#xff0c;不大了解為什么我們的代碼里面要用到prop-types這個庫&a…

ArkTS快速入門

一、概述 ArkTS是鴻蒙生態的應用開發語言。它在保持TypeScript&#xff08;簡稱TS&#xff09;基本語法風格的基礎上&#xff0c;對TS的動態類型特性施加更嚴格的約束&#xff0c;引入靜態類型。同時&#xff0c;提供了聲明式UI、狀態管理等相應的能力&#xff0c;讓開發者可以…

深度學習基礎回顧

深度學習基礎 淺層網絡 VS 深層網絡深度學習常用的激活函數Sigmoid 函數ReLU 函數Softplus 函數tanh函數 歸納偏置CNN適用數據歸納偏置 RNN適用數據歸納偏置 淺層網絡 VS 深層網絡 淺層神經網絡參數過多&#xff0c;導致模型的復雜度和計算量很高&#xff0c;難以訓練。而深層…

Redisson的基礎使用(2)

布隆過濾器&#xff08;Bloom Filter&#xff09; 布隆過濾器一般用于解決緩存穿透的問題。主要原理是使用一組哈希函數&#xff0c;將元素映射成一組位數組中的索引位置。如果要檢查某個元素是否在集合中時&#xff0c;將此元素通過所有的哈希函數&#xff0c;查看哈希值對應的…

硬件開發筆記(十五):RK3568底板電路VGA顯示接口原理圖分析

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134849296 紅胖子網絡科技博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬…

多態和繼承復習

與其明天開始&#xff0c;不如現在行動&#xff01; 文章目錄 多態多態成立的條件細節 繼承&#x1f48e;總結 多態 多態成立的條件 存在繼承關系或者實現關系子類重寫父類的方法父類引用指向子類對象 細節 通過父類的引用調用子類的對象 Animal animal new Dog();animal…

C語言搭建項目-學生管理系統(非鏈表)

、 目錄 搭建offer.h文件 搭建offer.c中的main函數 密碼登入系統 搭建my_oferr.c中的接口函數 使用幫助菜單接口函數 增加學生信息接口函數 查詢學生信息接口函數 刪除學生信息接口函數 保存學生信息接口 打開文件fopen 關閉文件fclose 判斷是否保存文件fwrite 退出執行文件…

C++:const類型數據的修改問題

在C語言中const類型的數據嚴格意義上可以修改&#xff1a; const int a1; int*b&a; *b2;不同于C語言&#xff0c;C中指針類型是要嚴格對應的&#xff0c;對const類型的數據必須使用const類型的指針進行接收&#xff0c;從而避免修改&#xff1b; 但問題是c中同樣支持指針的…

年度工作總結怎么寫?掌握這些年終總結萬能公式,讓你的報告出彩無比!

光陰似箭&#xff0c;日月如梭&#xff0c;時間總是不疾不徐地向前奔去&#xff0c;轉眼就來到了2023年的最后一個月&#xff0c;12月一到&#xff0c;上班族和打工人又要開始忙活工作總結的事情~ 工作總結&#xff0c;不僅是一年工作的回顧&#xff0c;更是未來規劃的起點。你…