//Sort——STL.cpp:列举了c++、C里面定义好的Sort函数,重点说明STL中的sort函数 #include <iostream> #include <algorithm> #include <vector> #include <functional> using namespace std; int Comp(const void *p1, const void *p2 ) { return *((int *)p2) < *((int *)p1) ? 1 : -1; } void Print(int e) { cout << e << " "; } int main() { vector<int> data; int arraydata[10]; for (int i = 0; i < 10; ++i) { data.push_back((rand() % 100)); arraydata[i] = rand() % 100; } cout << "C语言中的qsort:" << endl; /*******************C语言中的qsort********************* * * 功 能:使用快速排序例程进行排序(不稳定的) * 用 法:void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)); * 参 数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序 * ******************************************************/ qsort(arraydata, 10, sizeof(int), Comp); for (int i = 0; i < 10; ++i) cout << arraydata[i] << " "; cout << endl; cout << "STL中的sort:" << endl; /*********************STL中的sort********************** * * 功 能:使用快速排序(nlogn)例程进行排序(不稳定的) * 用 法:void sort(RandomAccessIterator beg, RandomAccessIterator end, BinaryPredicate op) // 如果不加默认'<' * 参 数:1 迭代器的起始位置 2 迭代器的结束位置 3 op函数 // 见STL op函数写法 * ******************************************************/ sort(data.begin(), data.end()); for_each(data.begin(), data.end(), Print); cout << endl; sort(data.begin(), data.end(), greater<int>()); for_each(data.begin(), data.end(), Print); cout << endl; cout << "STL中的stable_sort:" << endl; /*****************STL中的stable_sort******************* * * 功 能:使用mergesort[n*log(n)*log(n)]进行排序(稳定的) * 用 法:void stable_sort(RandomAccessIterator beg, RandomAccessIterator end, BinaryPredicate op) // 如果不加默认'<' * 参 数:1 迭代器的起始位置 2 迭代器的结束位置 3 op函数 // 见STL op函数写法 * ******************************************************/ stable_sort(data.begin(), data.end()); for_each(data.begin(), data.end(), Print); cout << endl; stable_sort(data.begin(), data.end(), greater<int>()); for_each(data.begin(), data.end(), Print); cout << endl; cout << "STL中的partial_sort:" << endl; /*****************STL中的partial_sort******************* * * 功 能:使用heapsort[n*log(n)]进行排序(不稳定的) * 用 法:void partial_sort(RandomAccessIterator beg, RandomAccessIterator sortEnd, RandomAccessIterator end, BinaryPredicate op) // 如果不加默认'<' * 参 数:1 迭代器的起始位置 2 迭代器的结束位置 3 op函数 // 见STL op函数写法 * ******************************************************/ partial_sort(data.begin(), data.end(), data.end()); for_each(data.begin(), data.end(), Print); cout << endl; partial_sort(data.begin(), data.end(), data.end(), greater<int>()); for_each(data.begin(), data.end(), Print); cout << endl; /******************************************************/ }