1. 程式人生 > >C++的STL庫,vector sort排序時間複雜度 及常見容器比較

C++的STL庫,vector sort排序時間複雜度 及常見容器比較

http://www.cnblogs.com/sthv/p/5511921.html

http://www.169it.com/article/3215620760.html

http://www.cnblogs.com/sharpfeng/archive/2012/09/18/2691096.html

在C++的STL庫中,要實現排序可以 通過將所有元素儲存到vector中,然後通過sort演算法來排序,也可以通過multimap實現在插入元素的時候進行排序。在通過 vector+sort進行排序時,所有元素需要先存入vector容器中,sort在排序時又需要將元素全部取出來再進行排序。multimap底層實 現為紅黑樹,因此元素在插入的過程中就實現了排序。那麼到底哪一種排序速度更快呢?

   下面有一個測試程式:

#include <vector> #include <set> #include <algorithm> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/time.h> using namespace std; double
 time() { struct timeval tv; if (gettimeofday(&tv, NULL) != 0) return 0.0; return tv.tv_sec + tv.tv_usec / 1000000.0; } struct Score { string name; double score; bool operator <(const Score& right) const { return score < right.score; } }; int main(
int argc, char** argv) { vector<Score> src; for (int i = 0; i < 10000000; i++) { int num = rand(); char buf[32]; sprintf(buf, "%d", num); Score score = { buf, num }; src.push_back(score); } { double stime = time(); vector<Score> res; for (vector<Score>::const_iterator it = src.begin(); it != src.end(); ++it) { res.push_back(*it); } sort(res.begin(), res.end()); double etime = time();

相關推薦

C++的STLvector sort排序時間複雜 常見容器比較

http://www.cnblogs.com/sthv/p/5511921.html http://www.169it.com/article/3215620760.html http://www.cnblogs.com/sharpfeng/archi

c++標準裏的sort()排序函數

C++ STL Sort()函數是c++一種排序方法之一,學會了這種方法也打消我學習c++以來使用的冒泡排序和選擇排序所帶來的執行效率不高的問題!因為它使用的排序方法是類似於快排的方法,時間復雜度為n*log2(n),執行效率較高!一,sort()排序函數的使用方法I)Sort函數包含在頭文件為#in

排序 C# 0(1)的輔助空間o(n)的時間複雜進行排序資料量有上萬條。

</pre><pre code_snippet_id="589148" snippet_file_name="blog_20150126_1_6516364" name="code" class="csharp">protected void Pag

C++實現】第k大元素 時間複雜為O(n)空間複雜為O(1)

解題思路: 二基準快速排序,在排序時判斷每次找到的標記點下標 p 與 n-k 的大小,若小於n-k,則只需在p的右側繼續遞迴,若大於 p 則只需在p 的左側遞迴,直至 p 與 n-k 相等 vs可執行程式碼 #include<ctime> #includ

排序總結插入排序 選擇排序 交換排序 歸併排序 計數排序 時間複雜空間複雜穩定性詳解

排序大體分為兩類:比較排序和非比較排序一    各個排序的基本實現1.直接插入排序和希爾排序//整體思路:往一段有序區間插入元素,end標記為有序區間的最後一個元素下標,要插入的元素下標為end+1此處就稱tmp,先把他儲存起來,(否則可能被覆蓋)如果end+1這個元素 //

已知長度為n的線性表A採用順序儲存結構請寫一個時間複雜為O(n)、空間複雜為O(1)的演算法該演算法可刪除線性表中所有值為item的資料元素。

語言:C++ #include <iostream> using namespace std; typedef int ElemType; //定義 #define MAXSIZE 100 typedef struct {ElemType *elem; int length;}Sq

常見排序演算法時間複雜穩定性

排序演算法 平均時間複雜度 最壞時間複雜度 穩定性 選擇排序 O(N²) O(N²) 不穩定 氣泡排序 O(N²

計數排序--時間複雜為線性的排序演算法

    我們知道基於比較的排序演算法的最好的情況的時間複雜度是O(nlgn),然而存在一種神奇的排序演算法,不是基於比較的,而是空間換時間,使得時間複雜度能夠達到線性O(n+k),這種演算法就是本文將

歸併排序時間複雜----主定理

http://blog.csdn.net/touch_2011/article/details/6785881 1、序言 2、歸併排序           2.1 引出            歸併排序又是另一類排序演算法,它是一種基於“分治”策略的一種演算法。歸

比較演算法排序時間複雜證明過程

比較演算法排序 證明過程 通過排序樹,我們將陣列的比較過程分解(兩數相比得到的結果將為二叉樹) 則所有的葉節點的排列順序為可能的排列順序(若有nnn個元素,則排列個數為n!n!n!) 則決策樹的規模為指數級。(論文中出現的虛擬碼雖然及其難懂但長度較為固定)

排序時間複雜

排序方法                 最好情況                最壞情況             平均情況              穩定性  氣泡排序                    O(n)                       O(n2)

【Python】不使用迭代生成器生成斐波那契數列並大幅降低時間複雜

斐波那契數列指的是這樣一個數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 這個數列從第3項開始,每

java 快速排序 時間複雜 空間複雜 穩定性

 1、快速排序的基本思想:          通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,則分別對這兩部分繼續進行排序,直到整個序列有序。        先看一下這幅圖: 把整個序列看做一個數組,把第零個位置看做中軸,

資料結構---設計一個棧push, pop, min 時間複雜都是 O(1)

普通的棧,push, pop 操作的複雜度是 O(1), 但是如果要找出其中的最小值,則需要 O(N)的時間。 題目要求 min 複雜度也是 O(1), 做法便是 空間換時間,每一步棧的最小值都用一個

氣泡排序(時間複雜分析)

氣泡排序: public static void bubbleSort(int[] arr) { if(arr == null || arr.length < 2) { return; }

初學者學演演算法|從時間複雜認識常見演演算法(一)

O(log n):二分搜尋法時間複雜度為 O(log n) 的演演算法(這邊的 log 都是以二為底),代表當輸入的數量是 n 時,執行的步驟數會是 log n。(讓忘記 log 是什麼的同學們複習一下,當 log n = x 的意思是 n = 2^x,如果這部分的腦細胞尚未復活,且讓我們先記住 n = 2^

vector 二維陣列的push_backstl演算法中的sort排序vector insert 用法

1.vector 二維陣列的push_back vector<vector<int> >vec; vector<int>array1; for (int i=0;i<num;i++) {

[C++] STL函式之字串string::npos的介紹以及string中的find函式~

npos經常和find一起用~它們兩個都在標頭檔案<string>裡面~先看用法: #include <iostream> #include <string> us

自己整理的幾種常見排序演算法時間複雜空間複雜c++程式設計

/***************************************************** copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd.  File name: Author:fhb  

C標準中的快速排序(quick-sort)函式 [簡單應用]

#include <iostream> #include <cstdlib> using namespace std; const size_t INDEX_ZERO = 0; int com(const void *a,const void *