📜  C qsort()与C++ sort()(1)

📅  最后修改于: 2023-12-03 14:59:37.726000             🧑  作者: Mango

C语言中的qsort()与C++中的sort()

介绍

qsort()和sort()都是用于对数组或向量进行排序的函数,可以将数组或向量中的元素按照指定的顺序进行排序。但是两者之间还存在一些不同点。

C语言中的qsort()
函数原型
void qsort(void *base, size_t nmemb, size_t size, int (*comparator)(const void *, const void *));
参数解释
  • base:指向要排序的数组的首元素地址;
  • nmemb:数组中元素个数;
  • size:每个元素的大小;
  • comparator:用来比较两个元素的函数指针。
使用示例

下面是一个简单的例子,对一个有10个元素的数组进行排序:

#include <stdio.h>
#include <stdlib.h>

// 定义一个用于比较整数大小的函数
int cmpfunc(const void *a, const void *b)
{
    return *(int*)a - *(int*)b;
}

int main()
{
    int arr[] = {3, 5, 1, 7, 2, 8, 4, 9, 0, 6};
    int n = sizeof(arr) / sizeof(int);

    qsort(arr, n, sizeof(int), cmpfunc);

    for (int i = 0; i < n; ++i)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

输出为:

0 1 2 3 4 5 6 7 8 9 
C++中的sort()
函数原型
void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
参数解释
  • first:指向要排序的数组的首元素地址;
  • last:指向要排序的数组的尾元素地址;
  • comp:用于比较两个元素的谓词(可选参数)。
使用示例

下面是一个简单的例子,对一个有10个元素的数组进行排序:

#include <iostream>
#include <algorithm>

int main()
{
    int arr[] = {3, 5, 1, 7, 2, 8, 4, 9, 0, 6};
    int n = sizeof(arr) / sizeof(int);

    std::sort(arr, arr + n);

    for (int i = 0; i < n; ++i)
    {
        std::cout << arr[i] << " ";
    }
    return 0;
}

输出为:

0 1 2 3 4 5 6 7 8 9 
不同点
  1. 参数传递方式不同:qsort()使用C语言的方式传递指针,而sort()使用C++的Iterator;
  2. sort()相比qsort()效率更高,因为sort()在排序时采用的是快速排序算法,而qsort()采用的是快速排序或者合并排序算法,具体使用哪一种算法取决于不同的实现;
  3. sort()支持泛型,而qsort()只能排序一维数组。
总结

在C语言中使用qsort(),在C++中使用sort(),都是对数组或向量进行排序的好选择。在实际应用中,应该根据具体情况进行选择。