sort算法的原理?

来源:百度知道 编辑:UC知道 时间:2024/06/17 21:12:06
sort算法最后一个参数必须是返回值为true或false的函数?
怎么解释降序排序时的 return num1>num2 ?num1和num2分别代表什么?

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

template <class T>
class Print
{
public:
void operator() (const T &t)
{
cout<<t<<" ";
}
};

bool BigNumber(int num1,int num2)
{
return num1>num2;
}

int main()
{
Print<int> DoPrint;
vector<int> theArray(10);
int i=0;
for(i=0;i<10;i++)
theArray[i]=i;
//for_each(theArray.begin(),theArray.end(),i++); 此行错误
for_each(theArray.begin(),theArray.end(),DoPrint);
cout<<endl;

sort(theArray.begin(),theArray.end());
for_each(theArray.begin(),theArray.end(),DoPrint);
cout<<endl;

sort(theArray.begin(),theArray.end(),BigNumber);

void qsort( void *base,size_t num,size_t width,int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

其中base为起始地址,num为元素个数,
width为每个元素所占内存数,compare( (void *) elem1, (void *) elem2 )自定义比较规则.

最后一个参数的返回值是int型的,num1和num2表示你当前比较的两个元素,根据返回值来决定是否交换num1和num2的位置.

一串数字排序,无论什么算法,每一次比较都是拿出其中的两个数比较,交换,这两个数在这里就是num1和num2.num1和num2是不断在变的,不是固定的.

比如:
for ( i = 0; i < n - 1; ++i )
for ( j = i + 1; j < n; ++j )
if ( a[i] < a[j] ) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
在这里,每次比较时,num1和num2为a[i]和a[j]。

void qsort( void *base,size_t num,size_t width,int (__cdecl *compare )(const void *elem1, const void *elem2 ) );

其中base为起始地址,num为元素个数,
width为每个元素所占内存数,compare( (void *) elem1, (void *) elem2 )自定义比较规则.

最后一个参数的返回值是int型的,num1和num2表示你当前比较的两个元素,根据返回值来决定是否交换num1和num2的位置.

一串数字排序,无论什么算法,每一次比较都是拿出其中的两个数比较,交换,这两个数在这里就是num1和num2.num1和num2是不断在变的,不是固定的.
<