`
yunchow
  • 浏览: 317755 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

快速排序完整示例

    博客分类:
  • C++
阅读更多
#include <iostream>
using namespace std;

template< typename T >
void sort( T* a, int n){
        if(n<=1) return;//递归退出条件,否则会出现段错误 
        if(n==2){
                if(a[1]<*a) swap(a[1],*a);
                return;
        }
        swap(*a,a[n>>1]);
        T flag = a[0];//保存分界值
        T* left = a+1;
        T* right = a+n-1;
        while(  left<right ){
                while( left<right && *left<flag ) ++left;
                while( *right>=flag && right>a ) --right;
                if( left<right ) swap( *left,*right);
        }
        swap(*a,*right);
        sort(a,right-a);
        sort(right+1,(n-1)-(right-a));
}
int main()
{
        int a[10240];
        for(int i=0; i<10240; i++)
                a[i] = 10240-i;
        time_t t = time(NULL);
        sort(a,10240);
        cout << "time: " << time(NULL)-t << endl;
        for(int i=0; i<10; i++)
                cout << a[i] << ' ';
        cout << endl;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics