[英]C++ Array vs Vector Sorting (vector ~2.5x slower than array in my case (No Optimization))
我正在對100000
元素進行插入排序。 我寫了兩個函數。
1-我將給定的向量復制到數組中,然后應用排序,然后將數組復制回向量以供返回。
2-我在給定的向量上應用排序然后返回它。
現在根據我的知識向量也動態創建了一個數組,C++ Vector []
操作符速度的差異應該不存在或至少沒有這么多。 所以方法2
應該比方法1
快。 但令我驚訝的是,情況正好相反。 我試圖找到一個具體的答案,而不僅僅是數組更快。 :)
編譯器版本 => gcc 版本 6.2.0(Rev2,由 MSYS2 項目構建)g++ main.cpp -o main
#include <time.h>
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
vector<long> InsertionSort1(vector<long> nums){
int vsize = nums.size();
long* arr = new long[vsize];
int swap, j;
// Coping the vector to an array
for(int i=0;i<vsize;i++){
arr[i] = nums[i];
}
//sorting
for(int i=1;i<vsize;i++){
swap = arr[i];
j = i-1;
while(j>=0 && arr[j] > swap){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = swap;
}
// Coping the array back to vector
for(int i=0;i<vsize;i++){
nums[i] = arr[i];
}
return nums;
}
vector<long> InsertionSort2(vector<long> nums){
int vsize = nums.size();
int swap, j;
for(int i=1;i<vsize;i++){
swap = nums[i];
j = i-1;
while(j>=0 && nums[j] > swap){
nums[j+1] = nums[j];
j--;
}
nums[j+1] = swap;
}
return nums;
}
int main(){
vector<long> entries;
for(int i=0;i<100000;i++){
entries.push_back(rand()%100000);
}
double start = time(0);
InsertionSort1(entries);
double end = time(0);
cout<<"With Array => "<<end-start<<endl;
start = time(0);
InsertionSort2(entries);
end = time(0);
cout<<"With Vector => "<<end-start<<endl;
}
上面代碼的結果是:
With Array 100000 => 8
With Vector 100000 => 19
我認為衡量性能是一件好事! std::chrono::high_resolution_clock
或google benchmark
是更適合這項工作的工具。
您需要啟用適當的優化級別,例如-O3
以獲得有意義的結果。
為什么喜歡實現排序算法。 我將您的方法與std::sort
? 出於學術目的,這很好,否則你需要有充分的理由和經過衡量的證據,證明你做得更好。
數組 => 2.55608
向量 => 1.74857
使用 std::sort => 0.00657156
#include <time.h>
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
vector<long> InsertionSort1(vector<long> nums){
int vsize = nums.size();
long* arr = new long[vsize];
int swap, j;
// Coping the vector to an array
for(int i=0;i<vsize;i++){
arr[i] = nums[i];
}
//sorting
for(int i=1;i<vsize;i++){
swap = arr[i];
j = i-1;
while(j>=0 && arr[j] > swap){
arr[j+1] = arr[j];
j--;
}
arr[j+1] = swap;
}
// Coping the array back to vector
for(int i=0;i<vsize;i++){
nums[i] = arr[i];
}
// delete of is missing arr;
return nums;
}
vector<long> InsertionSort2(vector<long> nums){
int vsize = nums.size();
int swap, j;
for(int i=1;i<vsize;i++){
swap = nums[i];
j = i-1;
while(j>=0 && nums[j] > swap){
nums[j+1] = nums[j];
j--;
}
nums[j+1] = swap;
}
return nums;
}
int main(){
vector<long> entries;
for(int i=0;i<100000;i++){
entries.push_back(rand()%100000);
}
double start = time(0);
InsertionSort1(entries);
double end = time(0);
cout<<"With Array => "<<end-start<<endl;
start = time(0);
InsertionSort2(entries);
end = time(0);
cout<<"With Vector => "<<end-start<<endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.