C语言自带快排函数qsort
二次更改,sort()优于qsort(),好像为qsort()优化版本,建议使用sort()。
sort()是#include<algorithm>中的STL。
void sort(_RandomAccessIterator __first, _RandomAccessIterator __last,_Compare __comp)
前三个参数分别为欲排序位置的第一个位置(如a或a+n),最后一个后一个,决定顺序函数(不写即默认为升序)
注意:第一个到最后一个为左闭右开。
若想写由大到小,即:
int cmp(int a, int b){ return a > b; }
#include<iostream> #include<algorithm> using namespace std; int cmp(int a, int b){ return a > b; } int main() { int a[10] = {10, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //sort(a, a+10); sort(a, a+10, cmp); for(int i = 0; i < 10; i++) cout << a[i] << " "; }
详情参见:https://baike.baidu.com/item/sort%E5%87%BD%E6%95%B0/11042699?fr=aladdin
下文为qsort():
首先,qsort在#include<stdlib.h>中。
void qsort(void *_Base, size_t _NumOfElements, size_t _SizeOfElements, _CoreCrtNonSecureSearchSortCompareFunction _CompareFunction){}
前三个参数为数组起始地址,元素个数,每个元素大小(如sizeof(int)),最后则是自己所编写决定顺序的函数(如小到大或大到小)。
如由小到大,即:
int cmp(const void *a,const void *b) { return *(int *)a - *(int *)b; }
#include<stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return *(int *)a - *(int *)b; } int main() { int a[10] = {9,8,7,6,5,4,3,2,1,10}; qsort(a, sizeof(a)/sizeof(a[0]), sizeof(int), cmp); for(int i = 0; i < 10; i++){ printf("%d ", a[i]); } }

由大到小:
int cmp(const void *a,const void *b) { return *(int *)b - *(int *)a; }
详情参见:https://baike.baidu.com/item/qsort/4747970?fr=aladdin
浙公网安备 33010602011771号