1、debug下手写快排效率为sort的10倍
2、release下sort略快于手写快排(相比debug均有极大提高)
3、stable_sort 在debug下比sort快 release下比sort慢 原因不明。(release下均比debug下快2倍)
1 #pragma once 2 #include "stdafx.h" 3 #include <vector> 4 template<typename Comparable> 5 void insertSort(std::vector<Comparable>& v, int begin, int end) 6 { 7 for(int i=begin+1; i != end + 1; i++) 8 { 9 int j; 10 Comparable tmp = v[i]; 11 for(j=i; j > 0 && tmp < v[j-1]; j--) 12 { 13 //将较大数后移一位 14 v[j] = v[j-1]; 15 } 16 //与循环体内最后一次j不同 17 v[j] = tmp; 18 } 19 } 20 21 //三数排序,并将中值放在末尾 22 //用于选取枢纽值 23 template<typename Comparable> 24 const Comparable& median3(std::vector<Comparable>& v, int left, int right) 25 { 26 int center = (left + right)/2; 27 if(v[center] < v[left]) 28 swap(v[center], v[left]); 29 if(v[right] < v[left]) 30 swap(v[right], v[left]); 31 if(v[right] < v[center]) 32 swap(v[right], v[center]); 33 swap(v[center], v[right-1]); 34 return v[right-1]; 35 } 36 template<typename Comparable> 37 void QuickSort(std::vector<Comparable>& v, int left, int right) 38 { 39 if(left + 10 <= right) 40 { 41 Comparable pivot = median3(v, left, right); 42 int i = left,j = right - 1; 43 while(true) 44 { 45 while(v[++i] < pivot) 46 ; 47 while(v[--j] > pivot) 48 ; 49 if(i < j) 50 { 51 swap(v[i], v[j]); 52 } 53 else 54 { 55 break; 56 } 57 } 58 swap(v[i],v[right-1]); 59 QuickSort(v, left, i-1); 60 QuickSort(v, i+1, right); 61 } 62 else 63 { 64 insertSort(v, left, right); 65 } 66 }
快排实现
1 // QuickSort.cpp : Defines the entry point for the console application. 2 // 3 #include "stdafx.h" 4 #include "QuickSort.h" 5 #include <vector> 6 #include <iostream> 7 #include <time.h> 8 #include <algorithm> 9 using namespace std; 10 #define MAX_RAND 829346 11 int _tmain(int argc, _TCHAR* argv[]) 12 { 13 vector<long> v; 14 clock_t c_s,c_e; 15 for(int i =0 ; i < 2000000; i++) 16 { 17 v.push_back(long((double)rand()/RAND_MAX * MAX_RAND)); 18 } 19 vector<long> v1(v),v2(v),v3(v); 20 c_s =clock(); 21 QuickSort(v1,0,v1.size()-1); 22 c_e =clock(); 23 cout<<"QuickSort:"<<c_e-c_s<<endl; 24 c_s =clock(); 25 sort(v3.begin(),v3.end()); 26 c_e =clock(); 27 cout<<"sort:"<<c_e-c_s<<endl; 28 return 0; 29 }
运行时间测试
运行结果如下:
Debug下:
QuickSort:6562
Sort:67766
Release下:
QuickSort:218
Sort: 157
代码下载
http://pan.baidu.com/s/1jHqqxnS
时间: 2024-10-10 05:23:31