1. 快速排序的常规方法,运用动态数组来储存要排序的序列, 然后调用C语言的库函数qsort() , 函数其原型为: void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) ); , 至于这个compare 参数真的让人讨厌,还好<cstdlib> 提供了qsort 函数,让代码尽量的缩短。
其代码的实现为:
</pre><pre name="code" class="cpp">#include<iostream>
#include<cstdlib>
using namespace std ;
int Compare(const void *arg1 , const void *arg2)
{
return (*(int*)arg1 < *(int*)arg2) ? -1 :
(*(int*)arg1 > *(int*)arg2)? 1: 0 ;
}
int main(void)
{
int i = 0 , n ;
cout<<"请输入整数数组的序列,按任意非数字键结束:\n" ;
cin>>n ;
int *arr_Num = new int[n] ;
for(i = 0 ; i < n ; ++i)
{
cin>>arr_Num[i] ;
}
qsort(arr_Num , n , sizeof(int) , Compare) ; //排序
cout<<"排序后:"<<endl ;
for(i = 0 ; i < n ; ++i)
{
cout<<arr_Num[i]<<' ' ;
}
cout<<endl ;
return 0 ;
}
2. 我们灵活的应用c++的STL来完成此程序, <algorithm>提供的sort() 的函数原型为:
template<class RanIt> voidsort(RanIt first, RanIt last); 看起来比上面一个漂亮多了, 至少木有那个讨厌的compare(),函数了。
其代码的实现为:
#include<iostream>
#include<algorithm> //提供sort()函数
#include<vector>
using namespace std ;
int main(void)
{
vector<int>vec_Num ; //存放序列的向量
int n ; //要排序的个数
int element , i = 0 ;
cout<<"请输入序列的个数:"<<endl ;
cin>>n ;
cout<<"请输入整数序列,按任意的数字键结束输入:\n" ;
for(i = 0 ; i < n ; ++i)
{
cin>>element ;
vec_Num.push_back(element) ;
}
sort(vec_Num.begin() , vec_Num.end()) ;
for(i = 0 ; i < n ; ++i)
{
cout<<vec_Num[i]<<' ' ;
}
cout<<endl ;
return 0 ;
}
3. 我们用泛型算法与STL巧妙的结合,来完成此程序.
其代码的实现为:
#include<iostream>
#include<algorithm> //提供sort()函数
#include<vector>
#include<iterator> //为了使用输入输出的迭代器
using namespace std ;
int main(void)
{
typedef vector<int> IntVector ;
typedef istream_iterator<int> IstreamItr ;
typedef ostream_iterator<int> OstreamItr ;
typedef back_insert_iterator<IntVector> BackInsItr ;
IntVector vec_Num ;
cout<<"请输入整数序列,按任意非数字键结束输入:"<<endl ;
copy(IstreamItr(cin) , IstreamItr() , BackInsItr(vec_Num)) ; //输入数据
sort(vec_Num.begin() , vec_Num.end()) ;
cout<<"排序后:"<<endl ;
copy(vec_Num.begin() , vec_Num.end() , OstreamItr(cout , " ")) ; //输出数据
cout<<endl ;
return 0 ;
}
copy()函数的原型为: template<class InIt, class OutIt> OutIt copy(InIt first, InIt last, OutIt x);
至于使用back_insert_iterator迭代器,就是引导copy 算法每次在容器末端插入一个数据,如果不使用它的话,
vector<int> 容器的数据个数超出范围。