Data Structures (Weiss) Chapter 7: QuickSort 快速排序

本文介绍了一种使用C++实现的快速排序算法,包括中位数选择、分区过程及插入排序优化小规模数组等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//

//  main.cpp

//  Data Structure TRY1

//

//  Created by zr9558 on 6/7/13.

//  Copyright (c) 2013 zr9558. All rights reserved.

//



// Data Structure C++, Weiss, P.285 quickSort


#include<iostream>

using namespace std;

#include<vector>

#include<math.h>


template<typename Comparable>

void insertionSort(vector<Comparable> &a, int left, int right)

{

   int j;

    

   for( int p=left+1; p<=right; ++p)

    {

        Comparable temp=a[p];

       for( j=p; j>left && temp<a[j-1]; --j)

            a[j]=a[j-1];

        

        a[j]=temp;

    }

}




// Code to perform median-of-three partitioning

template<typename Comparable>

const Comparable &median3(vector<Comparable> &a, int left, int right)

{

   int center=(left+right)/2;

   if( a[center]<a[left]) swap(a[left],a[center]);

   if( a[right]<a[left]) swap(a[left],a[right]);

   if( a[right]<a[center]) swap(a[center],a[right]);

    

    //Place pivot at position right-1

    swap(a[center],a[right-1]);

   return a[right-1];

}



template<typename Comparable>

void quickSort(vector<Comparable> &a, int left, int right)

{

   if( left+10<=right)

    {

        Comparable pivot=median3(a,left,right);

        

        // Begin partitioning

       int i=left, j=right-1;

       for(;;)

        {

           while( a[++i]<pivot) ;

           while( pivot<a[--j]) ;

           if( i<j) swap(a[i],a[j]);

           else break;

        }

        

        swap(a[i],a[right-1]);//Restore pivot

        

        quickSort(a, left, i-1);

        quickSort(a, i+1, right);

        

    }

   else insertionSort(a, left, right);

}





template<typename Comparable>

void quickSort(vector<Comparable> &a)

{

    quickSort(a,0, int( a.size())-1);

}




int main()

{


   vector<int> ivec;

   for( int i=0; i<40; ++i)

        ivec.push_back(rand()%200);

    

   for( int i=0; i!=ivec.size(); ++i)

       cout<<ivec[i]<<" ";

    cout<<endl;

    

   quickSort(ivec);

    

 

   for( int i=0; i!=ivec.size(); ++i)

       cout<<ivec[i]<<" ";

    cout<<endl;


    

    

    

    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值