排序算法(1) 快速排序 C++實現

快速排序基本特性

  1. 時間復雜度:O(n*lgn)
  2. 最壞:O(n^2)
  3. 空間復雜度:最好情況下:O(lgn),最壞情況:O(n),平均情況:O(lgn)
  4. 不穩定。

關于快速排序的空間復雜度,謝謝@命運他爹 同學指正。詳述一下。

快速排序由于每次遞歸的時候會占用一個空間返回中間數位置,所以一次遞歸的空間復雜度為O(1)。

最好情況和平均情況下的遞歸深度為O(lgn),相應的空間復雜度就是O(lgn)

最壞情況下的遞歸深度為O(n),空間復雜度為O(n)。

算法

QUICKSORT(A, p, r)
? ??if?p < r
? ? ? ?then q ← PARTITION(A, p, r)??//關鍵
? ? ? ? ? ??QUICKSORT(A, p, q - 1)
? ? ? ? ? ??QUICKSORT(A, q + 1, r)
PARTITION(A, p, r)
? ? ??x ← A[r]
? ? ??i ← p - 1
? ? ??for?j ← p to r - 1
? ? ? ? ? ?do?if?A[j] ≤ x
? ? ? ? ? ? ? ? ?then i ← i + 1
? ? ? ? ? ? ? ? ? ? ?exchange A[i] <-> A[j]
? ? ??exchange A[i + 1] <-> A[r]
? ? ??return?i + 1

示例

?

待排序數組:7? 3? 5? 9? 8? 5? 1? 10? 4? 6

源碼類聲明
class BaseSort {
public:BaseSort() { }virtual void sort() = 0;
};class QuickSort : public BaseSort {
public:QuickSort(int Array[], int len) : BaseSort() {this->Array = Array;this->len = len;}void sort();
private:int partition(int Array[], int start, int end);void quicksort(int Array[], int start, int end);
private:int* Array;int len;
};
////相關成員函數實現void QuickSort::sort() {quicksort(Array, 0, len-1);
}void QuickSort::quicksort(int Array[], int start, int end) {if ( start < end ) {int mid = this->partition(Array, start, end);if ( start < mid - 1 )quicksort(Array, start, mid-1 );if ( mid + 1 < end )quicksort(Array, mid+1, end);}
}int QuickSort::partition(int Array[], int start, int end) {int i, j, x, tmp;x = Array[end];i = start -1;for ( j = start; j < end; j++ ) {if ( Array[j] <= x) {i++;tmp = Array[j];Array[j] = Array[i];Array[i] = tmp;}}tmp = Array[end];Array[end] = Array[i+1];Array[i+1] = tmp;//if (DEBUG) {//    printArray(Array, len, "MidResult:");//}return i+1;
}
測試:int main(int argc, char* argv[])
{//printf("Hello World!\n");int a[10] = {7,3,2,9,8,5,1,10,4,6};int len = 10;QuickSort* quicksort= new QuickSort(a, len);quicksort->sort();printArray(a, len, "QuickSort:");system("pause");//用于暫停return 0;
}

?

轉載于:https://www.cnblogs.com/rinack/p/4294162.html

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

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

相關文章

boost 變量類型轉換

如果vs版本比較低&#xff0c;會不支持一些std類型轉換函數&#xff08;vs2008就不支持&#xff09;&#xff0c;比如&#xff1a; std::to_string \\數字轉字符串 std::stoll \\字符串轉數字而且項目碰巧用boost庫&#xff0c;可以考慮用下面的的方法來進行類型轉換…

PB增刪改

新建一個數據窗口----選擇需要更新的表&#xff0c;或者直接寫sql也可以如下圖已經建立好的數據窗口&#xff0c;根據要求將需要更新的列、unigue key 還有需要更新的表設置好&#xff0c;【將需要更新列的taborder設置大于0 這樣維護的時候可以編輯&#xff08;等于0是不能編輯…

(五十六)iOS多線程之NSOperation

NSOpertation是一套OC的API&#xff0c;是對GCD進行的Cocoa抽象。 NSOperation有兩種不同類型的隊列&#xff0c;主隊列和自定義隊列。 主隊列運行于主線程上&#xff0c;自定義隊列在后臺運行。 【NSBlockOperation】 通過Block創建任務&#xff0c;下面比較主隊列和自定義隊列…

android 系統源碼調試 局部變量值_如何方便快速的整編Android 9.0系統源碼?

點擊上方“劉望舒”&#xff0c;選擇“星標”多點在看&#xff0c;就是真愛&#xff01;作者 : 劉望舒 | 來源 &#xff1a;劉望舒的博客地址&#xff1a;http://liuwangshu.cn/framework/aosp/3-compiling-aosp.html前言在上一篇文章是時候下載Android 9.0系統源碼了中&…

boost 文件操作

如果要簡單處理文件和文件夾的時候&#xff08;刪除、重命名等&#xff09;&#xff0c;使用Windows的系統函數會十分麻煩&#xff0c;可以嘗試一下使用Boost庫來進行處理 頭文件 #include <boost/filesystem.hpp>如果要獲得每次處理的結果錯誤碼&#xff0c;需要加上頭…

讓“是男人就下到100層”在Android平臺上跑起來

原工程:https://github.com/jeekun/DownFloors 移植后的代碼&#xff1a;HelloCpp.zip 移植后的APK&#xff1a;HelloCpp.apk 說明&#xff1a;&#xff08;cocos2d-x版本是“ 2.2&#xff09; 1.該工程是直接在HelloCpp上修改完成,所以包名也不修改了 2.原工程里面可能是采用g…

Codeforces Round #277 (Div. 2) 題解

Codeforces Round #277 (Div. 2)A. Calculating Functiontime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputFor a positive integer n lets define a function f: f(n)???-?1??2?-?3??..??(?-?1)nn Your …

QT 邊框圓角處理

平時的邊框是平角的&#xff1a; 如果需要圓角的話&#xff0c;就要加stylesheet加上這個&#xff1a; border-radius:3px;比如&#xff1a; QPushButton{ border-radius:3px; }就變成圓角了&#xff1a; px前面的數字越大就越圓&#xff0c;比如5px比3px圓 假如只需要某一…

3級調度 fpga_Vivado HLS學習筆記——1.了解FPGA架構

本篇文章為本人學習Xilinx的Vivado HLS教程記錄的學習筆記&#xff0c;僅供學習參考。Vivado HLS官方視頻教程&#xff1a;優酷視頻?v.youku.com目錄&#xff1a; Vivado HLS課程簡介FPGA與CPU、GPU、DSP的區別FPGA的優勢Xilinx FPGA架構:邏輯單元、算術邏輯單元、存儲單元使用…

[LeetCode]Maximum Depth of Binary Tree

Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 思考&#xff1a;DFS。 /*** Definition for binary tree* struct TreeNode {* int val;* Tree…

BZOJ2435 [Noi2011]道路修建

這是NOI11年題&#xff0c;你在逗我&#xff1f; 直接dfs就可以了&#xff0c;Linux下貌似不會爆棧。。。 1 /**************************************************************2 Problem: 24353 User: rausen4 Language: C5 Result: Accepted6 Time:5184 …

Qt異常結束程序無法重新運行

有時候代碼有問題會導致qt異常結束 修改完后重新運行又會出現 查看任務管理器又沒有這個進程 可以使用資源管理器打開看看 也可以考慮使用process explorer查看 發現程序掛起來&#xff0c;結束掉它就可以重新運行了

hadooppythonsql_半小時搞定Hadoop+Mysql+Hive+Python

1. 說明搭建過Hadoop集群的小伙伴一定知道&#xff0c;如果不用docker&#xff0c;半小時配好HadoopMysqlHive(后簡稱Hive)肯定是胡吹&#xff0c;有了Docker鏡像&#xff0c;沒有說明文檔&#xff0c;配好了也不一定會用。本文將介紹如何在半小時內&#xff0c;讓Hive在你的Li…

PHP 切割字符串 點號 不用雙斜杠

$name "tupian.png"; $nameArr explode(".", $name); 習慣了Java的程序員容易寫成 $nameArr explode("\\.", $name);//在PHP中是不正確的轉載于:https://www.cnblogs.com/wuyou/p/3463425.html

Qt新添加的類無法鏈接

通過這個方法給工程添加了個類&#xff1a; 編譯的時候就出現了這個問題&#xff1a; 執行一下qmake 然后再重新構建項目就可以了

URAL 1830 Help in the RNOS 思路,讀題 難度:1

http://acm.timus.ru/problem.aspx?space1&num1830 這道題需要理解題目操作的意思, 要更改第i位的狀態,第i-1位必須激活為1,0-i-2位必須為0,如果0-i-1位開始時全為0,那么從0位開始進行操作 一.首先考慮對于0-i-1位都是0,需要更改i位的情況,需要 1.更改i-1位,2.按一下打開下…

openssh升級sftp_OpenSSH 8.2 發布 包括 sftp 客戶端和服務器支持

OpenSSH 8.2 發布了。OpenSSH 是 100% 完整的 SSH 協議 2.0 版本的實現&#xff0c;并且包括 sftp 客戶端和服務器支持。此版本變化不少&#xff0c;其中有兩個地方值得特別關注。一個是新特性&#xff0c;此版本增加了對 FIDO/U2F 硬件身份驗證器的支持。FIDO/U2F 是廉價硬件雙…

任務隊列摘自新鋒

在開發C程序時&#xff0c;一般在吞吐量、并發、實時性上有較高的要求。設計C程序時&#xff0c;總結起來可以從如下幾點提高效率&#xff1a; l 并發l 異步l 緩存下面將我平常工作中遇到一些問題例舉一二&#xff0c;其設計思想無非以上三點。 1任務隊列 1.1 以生產者-消…

C++容器遍歷時刪除元素

vector 錯誤做法 這樣做會在遍歷過程中越界導致程序崩潰 std::vector<int> vecInt({ 1, 3, 2, 1, 4, 1 });for (auto i vecInt.begin(); i ! vecInt.end() ; i) {if (*i 1) {vecInt.erase(i);}}正確做法 std::vector<int> vecInt({ 1, 3, 2, 1, 4, 1 });for (a…

按鈕圖片拉伸_圖片墻有多香?高手都在用的PPT封面制作技巧!

大家好&#xff0c;我是李導~這次&#xff0c;冬天是真的來了&#xff0c;不知道大家有沒有感覺&#xff0c;每次冷空氣真正襲來之前我們都會以為今年是個暖冬&#xff0c;結果突然有一天氣溫從20度直降到個位數&#xff0c;我們都會認為今年比以往的冬天都冷。但是&#xff0c…