如何使用快速排序对字符串数组进行排序

Posted

技术标签:

【中文标题】如何使用快速排序对字符串数组进行排序【英文标题】:How to use Quick Sort to sort an array of strings 【发布时间】:2016-06-09 06:05:05 【问题描述】:

我想使用 quicksort (std::qsort(arg,arg,arg)) 而不是 (std::sort(arg,arg,arg)) 对字符串数组 s[ ] 进行排序。 那么我还需要在下面的代码中更改什么。

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
    int t;
    scanf("%d",&t);
    while (t--) 
        char x[1010];
        string s[1010];
        scanf("%s", x);
        int len  = strlen(x);
        s[len] = "";
        for(int i = len - 1; i >= 0; --i) 
            s[i] = x[i];
            s[i] += s[i+1];
        
  //  s[] now contains len number of strings 
        sort(s, s + len);      // So its here where I want to use qsort

    
    return 0;

我需要将哪些参数传递给qsort(;;)AND如何编写用于快速排序的 cmp() 函数。

【问题讨论】:

也许this 有帮助。 可能它只适用于整数。我怀疑。 它适用于任意类型。 Despite the name, C++, C, and POSIX standards do not require this function to be implemented using quicksort or make any complexity or stability guarantees.,请记住这一点。 @Sparrow -- 在std::string 数组上使用qsort 是行不通的。它将引入未定义的行为。 Please see this。 std::string 不是 POD 类型,qsort 只保证适用于 POD 类型。 【参考方案1】:

您需要创建一个比较函数来比较 2 个字符串并将其用作 qsort 中的最后一个参数。 在此处阅读有关该功能的更多信息 http://www.cplusplus.com/reference/cstdlib/qsort/?kw=qsort

【讨论】:

如果 OP 使用 qsortstd::string 的数组进行排序,这可能会编译,但由于 std::string 不是 POD 类型,因此不能保证工作。

以上是关于如何使用快速排序对字符串数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

对字符串数组进行排序

sort函数能对结构体进行排序吗?

按字母顺序对 c 字符串数组进行排序

如何根据数字对字符串数组进行排序?

excel快速排序技巧,如何使用SORTBY函数对数据进行排序

对字符串中字符进行自然顺序排序(基本类型排序)-冒泡算法实现