如何使用快速排序对字符串数组进行排序
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 使用qsort
对 std::string
的数组进行排序,这可能会编译,但由于 std::string
不是 POD 类型,因此不能保证工作。以上是关于如何使用快速排序对字符串数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章