在我们平时排序的时候,莫不过是sort,stable_sort……这些STL里面的排序模版了,在C中也有一个很厉害的排序算法:qsort,今天简单说说他的一个用法。
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
inline int intcmp(const void* a,const void* b)
{
int aa = *(int *)a;
int bb = *(int *)b;
return (aa < bb) ? -1 : (aa > bb) ? 1 : 0;
}
int main()
{
const int size = 10;
int arr[size];
int n = 0;
cout << "please input 10 integers:" << endl;
while(cin >> arr[n++] && (n <= size));
n--;
qsort(arr,n,sizeof(int),intcmp);
cout << "The sorted elements is:" << endl;
for(unsigned int i = 0;i < size;++i)
{
cout << arr[i];
if(i != size-1)
cout << "->";
}
cout << endl;
system("pause");
return 0;
}
上面就是一个qsort的用法。用inline主要是为了更快的效率,
qsort的参数:
void __cdecl qsort(_Inout_bytecap_x_(_NumOfElements * _SizeOfElements) void * _Base,
_In_ size_t _NumOfElements, _In_ size_t _SizeOfElements,
_In_ int (__cdecl * _PtFuncCompare)(const void *, const void *));
在qsort实现内部需要将void*转换成需要的类型。