排序算法-歸并排序與快速排序

歸并排序與快速排序

快速排序是利用的遞歸思想:選取一個基準數,把小于基準數的放左邊 大于的放右邊直到整個序列有序 。快排分割函數 O(lognn), 空間 :沒有額外開辟新的數組但是遞歸樹調用函數會占用棧內存 O(logn) 。
歸并排序:在遞歸返回的過程中保證每個返回的子集都是有序的。時間O(logn
n),空間:O(n)。

歸并排序

#include<iostream>
#include<stdlib.h>
#include<time.h> 
using namespace std;
//在歸 的過程中 進行數據的合并 達到排序的效果
//時間O(logn*n) 空間:O(n) 
//遞歸排序
void _merge(int arr[], int left, int mid, int right){int *p = new int[right - left + 1]; int idx = 0; int i = left;int j = mid + 1;//開始數據合并 while(i <= mid && j <= right){if(arr[i] <= arr[j]){p[idx++] = arr[i++];}else{p[idx++] = arr[j++];}}//左端有剩余 while(i <= mid){p[idx++] = arr[i++];} //右端有剩余while(j <= right){p[idx++] = arr[j++];} //將合并后的數據拷貝給原數組for(i = left, j = 0; i <= right ; ++i, ++j){arr[i] = p[j];}delete []p; 
} //歸并排序遞歸接口函數 
void  _mergeSort(int arr[], int left, int right){// 遞歸結束條件if(left >= right) return; int mid = (left + right) / 2;//先傳遞 _mergeSort(arr, left, mid);_mergeSort(arr, mid + 1, right);//再歸并 額外的內存空間 小段有序 和并為 大段有序_merge(arr, left, mid, right); 
} void _mergeSort(int arr[] , int length){return _mergeSort(arr, 0, length - 1);
}int main(){int arr[10];int length = 10;srand(time(NULL));for(int i = 0 ; i < length ; ++i){arr[i] = rand() % 100 + 1;cout<<arr[i]<<" "; }cout<<endl;_mergeSort(arr,length); for(int i = 0 ; i < length ; ++i){cout<<arr[i]<<" "; }return 0;
} 

快速排序

#include<iostream>
#include<stdlib.h>
#include<time.h> 
using namespace std;
//快速排序思想:選取一個基準數,把小于基準數的放左邊 大于的放右邊 直到整個序列有序 
//從數組左右兩邊都找 找到一個停下來換另外一邊  
//快排優化思想:隨著快排算法的執行,數據越來越有序,在一定范圍內,可以采用插入排序代替快速排序 //快排分割函數 O(logn*n) 空間 :沒有額外開辟新的數組但是遞歸樹調用函數會占用棧內存 O(logn) 
int partation(int arr[] , int begin , int end){int val = arr[begin];int i = begin;int j = end;while(i < j){while(i < j && arr[j] > val)j--;//找到小于基準數 if(i < j){arr[i] = arr[j];i++; }while(i < j && arr[i] < val){i++;}//大于的基準數 if(i < j){arr[j] = arr[i];j--;}} arr[i] = val;return i;
}
//快排的遞歸接口 
void _fast(int arr[] , int begin , int end){if(begin >= end) return; //遞歸結束條件//在區間做一次快排int pos = partation(arr, begin, end);//對基準數的左邊快排_fast(arr, begin , pos - 1); //對基準數的右邊做快排 _fast(arr, pos + 1 , end);}void _fast(int arr[] , int length){return _fast(arr, 0 , length - 1); 
}int main(){int arr[10];int length = 10;srand(time(NULL));for(int i = 0 ; i < length ; ++i){arr[i] = rand() % 100 + 1;cout<<arr[i]<<" "; }cout<<endl;_fast(arr,length); for(int i = 0 ; i < length ; ++i){cout<<arr[i]<<" "; }return 0;
} 

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

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

相關文章

北大開源音頻編輯模型PlayDiffusion,可實現音頻局部編輯,比傳統 AR 模型的效率高出 50 倍!

北大開源了一個音頻編輯模型PlayDiffusion&#xff0c;可以實現類似圖片修復(inpaint)的局部編輯功能 - 只需修改音頻中的特定片段&#xff0c;而無需重新生成整段音頻。此外&#xff0c;它還是一個高性能的 TTS 系統&#xff0c;比傳統 AR 模型的效率高出 50 倍。 自回歸 Tra…

MyBatis————入門

1&#xff0c;配置相關 我們上一期詳細講了一下使用注解來實現操作數據庫的方式&#xff0c;我們今天使用xml來實現&#xff0c;有同學可能有疑問&#xff0c;使用注解挺方便呀&#xff0c;為啥還要注解呀&#xff0c;先來說一下注解我感覺挺麻煩的&#xff0c;但是我們后面要…

【推薦算法】推薦算法演進史:從協同過濾到深度強化學習

推薦算法演進史&#xff1a;從協同過濾到深度強化學習 一、傳統推薦時代&#xff1a;協同過濾的奠基&#xff08;1990s-2006&#xff09;1.1 算法背景&#xff1a;信息爆炸的挑戰1.2 核心算法&#xff1a;協同過濾1.3 局限性 二、深度學習黎明&#xff1a;神經網絡初探&#xf…

Java基于SpringBoot的校園閑置物品交易系統,附源碼+文檔說明

博主介紹&#xff1a;?Java老徐、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&…

Ajax Systems公司的核心產品有哪些?

Ajax Systems 是一家專注于家庭安全和智能系統的公司&#xff0c;其核心產品如下3&#xff1a; 入侵保護設備&#xff1a;如 MotionCam Outdoor 無線室外運動探測器&#xff0c;配備內置攝像頭和兩個紅外傳感器&#xff0c;可通過預裝電池運行長達三年&#xff0c;能在 15 米距…

64、js 中require和import有何區別?

在 JavaScript 中&#xff0c;require 和 import 都是用于模塊導入的語法&#xff0c;但它們屬于不同的模塊系統&#xff0c;具有顯著的區別&#xff1a; 1. 模塊系統不同 require 屬于 CommonJS 模塊系統&#xff08;Node.js 默認使用&#xff09;。 語法&#xff1a;const…

Java+Access綜合測評系統源碼分享:含論文、開題報告、任務書全套資料

JAVAaccess綜合測評系統畢業設計 一、系統概述 本系統采用Java Swing開發前端界面&#xff0c;結合Access數據庫實現數據存儲&#xff0c;專為教育機構打造的綜合測評解決方案。系統包含學生管理、題庫管理、在線測評、成績分析四大核心模塊&#xff0c;實現了測評流程的全自…

【python】RGB to YUV and YUV to RGB

文章目錄 1、YUV2、YUV vs RGB3、RGB to YUV4、YUV to RGB附錄——YUV NV12 vs YUV NV21參考1、YUV YUV 顏色空間,又常被稱作 YCbCr 顏色空間,是用于數字電視的顏色空間,在 ITU-R BT.601、BT.709、BT.2020 標準中被明確定義,這三種標準分別針對標清、高清、超高清數字電視…

運行示例程序和一些基本操作

歡迎 ----> 示例 --> 選擇sample CTRL B 編譯代碼 CTRL R 運行exe 項目 中 Shadow build 表示是否 編譯生成文件和 源碼是否放一塊 勾上不在同一個地方 已有項目情況下怎么打開項目 方法一: 左鍵雙擊 xxx.pro 方法二: 文件菜單里面 選擇打開項目

計算機網絡第2章(下):物理層傳輸介質與核心設備全面解析

目錄 一、傳輸介質1.1 傳輸介質的分類1.2 導向型傳輸介質1.2.1 雙絞線&#xff08;Twisted Pair&#xff09;1.2.2 同軸電纜&#xff08;Coaxial Cable&#xff09;1.2.3 光纖&#xff08;Optical Fiber&#xff09;1.2.4 以太網對有線傳輸介質的命名規則 1.3 非導向型傳輸介質…

PHP文件包含漏洞詳解:原理、利用與防御

PHP文件包含漏洞詳解&#xff1a;原理、利用與防御 什么是文件包含漏洞&#xff1f; 文件包含漏洞是PHP應用程序中常見的安全問題&#xff0c;當開發者使用包含函數引入文件時&#xff0c;如果傳入的文件名參數未經嚴格校驗&#xff0c;攻擊者就可能利用這個漏洞讀取敏感文件…

5.4.2 Spring Boot整合Redis

本次實戰主要圍繞Spring Boot與Redis的整合展開&#xff0c;首先創建了一個Spring Boot項目&#xff0c;并配置了Redis的相關屬性。接著&#xff0c;定義了三個實體類&#xff1a;Address、Family和Person&#xff0c;分別表示地址、家庭成員和個人信息&#xff0c;并使用Index…

java內存模型JMM

Java 內存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;定義了 Java 程序中的變量、線程如何和本地內存以及主內存進行交互的規則。它主要涉及到多線程環境下的共享變量可見性、指令重排等問題&#xff0c;是理解并發編程中的關鍵概念。 核心概念&#xff1a…

配置git命令縮寫

以下是 Git 命令縮寫的配置方法及常用方案&#xff0c;適用于 Linux/macOS/Windows 系統&#xff1a; &#x1f527; 一、配置方法 1. 命令行設置&#xff08;推薦&#xff09; # 基礎命令縮寫 git config --global alias.st status git config --global alias.co che…

準確--k8s cgroup問題排查

k8s cgroup問題排查 6月 06 17:20:39 k8s-node01 containerd[1515]: time"2025-06-06T17:20:39.42902033408:00" levelerror msg"StartContainer fo r \"46ae0ef9618b96447a1f28fd2229647fe671e8acbcec02c8c46b37051130c8c4\" failed" error&qu…

Go 中 map 的雙值檢測寫法詳解

Go 中 map 的雙值檢測寫法詳解 在 Go 中&#xff0c;if char, exists : pairs[s[i]]; exists { 是一種利用 Go 語言特性編寫的優雅條件語句&#xff0c;用于檢測 map 中是否存在某個鍵。讓我們分解解釋這種寫法&#xff1a; 語法結構解析 if value, ok : mapVariable[key]; …

C# Wkhtmltopdf HTML轉PDF碰到的問題

最近碰到一個Html轉PDF的需求&#xff0c;看了一下基本上都是需要依賴Wkhtmltopdf&#xff0c;需要在Windows或者linux安裝這個可以后使用。找了一下選擇了HtmlToPDFCore&#xff0c;這個庫是對Wkhtmltopdf.NetCore簡單二次封裝&#xff0c;這個庫的好處就是通過NuGet安裝HtmlT…

grafana 批量視圖備份及恢復(含數據源)

一、grafana 批量視圖備份 import requests import json import urllib3 import osfrom requests.auth import HTTPBasicAuthfilename_folders_map "folders_map.json" type_folder "dash-folder" type_dashboard "dash-db"# Grafana服務器地…

.Net Framework 4/C# 關鍵字(非常用,持續更新...)

一、is 關鍵字 is 關鍵字用于檢查對象是否于給定類型兼容,如果兼容將返回 true,如果不兼容則返回 false,在進行類型轉換前,可以先使用 is 關鍵字判斷對象是否與指定類型兼容,如果兼容才進行轉換,這樣的轉換是安全的。 例如有:首先創建一個字符串對象,然后將字符串對象隱…

露亦如電 · 時之沙 | 讓遺憾在灰燼里隨風而去

注&#xff1a;略作重排&#xff0c;未整理去重。 一個人最了不起的能力&#xff1a;快速翻篇 原創 十點邀約作者 棠唐 2022 年 11 月 29 日 20:12 福建 《了凡四訓》有言&#xff1a;“從前種種&#xff0c;譬如昨日死&#xff1b;從后種種&#xff0c;譬如今日生。” 人生猶…