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

posted on 2022-03-19 11:51  我欲  阅读(267)  评论(0)    收藏  举报