你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
7.1 快速排序
 
[cpp]
/*7.1 快速排序
 *QUICK-SORT
 */ 
#include<cstdlib> 
#include<iostream> 
#include<iomanip> 
#include<vector> 
 
using namespace std; 
typedef vector<int>::iterator ivecIte; 
 
size_t chkivIte(ivecIte iteB, ivecIte iteE) 

    if(iteB > iteE) { 
        cout<<"wrong in iterator range!"<<endl; 
        exit(0); 
    } 
    return iteE - iteB; 
}  
 
ivecIte partition(vector<int> &ivec, ivecIte iteB, ivecIte iteE) 

    chkivIte(iteB, iteE); 
    //ite1指向大于*(iteE-1)队列的最左边的元素 
    ivecIte ite1 = iteB, ite2; 
    for(ite2 = iteB; iteE-1 != ite2; ++ite2) { 
        if( *ite2 < *(iteE-1)) { 
            if( ite1!= ite2) {//ite1与ite2指向相同时不能使用^ 
                *ite1 = *ite1 ^ *ite2; 
                *ite2 = *ite1 ^ *ite2; 
                *ite1 = *ite1 ^ *ite2; 
            } 
            ++ite1; 
        } 
    } 
    //如果ite为iteE-1,说明iteE-1指向最大值,要将其排出 
    //而且两者相等时不能用^ 
    if(ite1 != iteE-1) 
    { 
        *ite1 = *ite1 ^ *(iteE - 1); 
        *(iteE - 1) = *ite1 ^ *(iteE - 1); 
        *ite1++ = *ite1 ^ *(iteE - 1); 
    } 
    return ite1; 

 
void quickSort(vector<int> &ivec, ivecIte iteB, ivecIte iteE) 

    chkivIte(iteB,iteE); 
    if(1 < iteE-iteB) { //至少有两个元素时才比较 
        ivecIte iteP = partition(ivec, iteB, iteE); 
        quickSort(ivec, iteB, iteP); 
        quickSort(ivec, iteP, iteE); 
    } 

 
int main()  

    vector<int> ivec; 
    int inData; 
    cout<<"input some integers with end-of-file!"<<endl; 
    while(cin>>inData) 
        ivec.push_back(inData); 
    quickSort(ivec, ivec.begin(), ivec.end()); 
    for(ivecIte ite = ivec.begin(); ivec.end() != ite; ++ite)  
        cout<<setw(5)<<*ite; 
    cout<<endl; 
    system("PAUSE"); 
    return EXIT_SUCCESS;
  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089