论坛首页 编程语言技术论坛

快速排序完整示例

浏览 2279 次
精华帖 (0) :: 良好帖 (8) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-01  
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