C++STL sort 정렬 내부 메커니즘 - Apple의 학습 노트
STL sort 구현 원리:
STL의sort는 일반적인 빠른 정렬이 아니라 일반적인 빠른 정렬을 최적화하는 것 외에 삽입 정렬과 무더기 정렬을 결합시켰다.수량 등급과 상황에 따라 적당한 정렬 방법을 자동으로 선택할 수 있다.데이터의 양이 비교적 많을 때 빠른 정렬을 채택하여 단락을 나누어 귀속한다.일단 세그먼트를 나눈 후의 데이터 양이 어떤 밸브 값보다 작으면 귀속 호출이 너무 큰 추가 부하를 가져오지 않도록 삽입 정렬로 바꿉니다.귀속 단계가 너무 깊으면 최악의 상황이 발생하는 경향이 있고 무더기로 순서를 바꾸기도 한다.
c++11로 vslam을 선택한 이상 STL은 반드시 배워야 한다.바퀴를 만들지 않고 거인의 어깨에 서 있다는 원칙에 따라.물론 STL의 메커니즘을 이해하고 스스로 체험해야만 STL 라이브러리가 확실히 좋은 것인지, 다른 사람이 좋다고 해서 좋은 것인지를 확인할 수 있다.
c++ code
#include
#include
#include
#include
#include
#include
using namespace std;
/*
ratio<3600, 1> hours
ratio<60, 1> minutes
ratio<1, 1> seconds
ratio<1, 1000> milliseconds
ratio<1, 1000000> microseconds
ratio<1, 1000000000> nanosecons
*/
#define LEN 10000
int main()
{
int n=0;
int min=0;
vector v1;
for( int i = 0; i != LEN; ++i )
{
v1.push_back(rand()%10);
}
//copy(v1.begin(), v1.end(), v2.begin());
vector v2(v1.begin(), v1.end()); // copy ,
auto beginTime = chrono::high_resolution_clock::now();
sort( v1.begin(), v1.end()); // , STL
auto endTime = chrono::high_resolution_clock::now();
auto elapsedTime= chrono::duration_cast<:milliseconds>(endTime - beginTime);
cout << "v1:Algorithm elapsed time is " << elapsedTime.count() << " milliseconds" << endl;
beginTime = chrono::high_resolution_clock::now();
for(int i = 0; i < LEN; i++ )
{
min = v2[i];
for(int j = i; j < LEN; j++ )
{
if(v2[j](endTime - beginTime);
cout << "v2:Algorithm elapsed time is " << elapsedTime.count() << " milliseconds" << endl;
// For debug
// for( int i = 0; i != LEN; ++i )
// {
// cout<
출력 결과:
D:\ws\alg_compare\build>main.exe
v1:Algorithm elapsed time is 2 milliseconds
v2:Algorithm elapsed time is 185 milliseconds
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.