【发布时间】:2012-02-29 14:19:48
【问题描述】:
我必须在动态字符串数组上实现自己的排序,例如这样的数组是:
string * sortArray;
然后我从一个文本文件中读取数组的大小,并根据需要使数组变长并填充它。所以,我有...
sortArray = new string[_numberOfNames];
for(int i = 0; i < _numberOfNames; ++i){
sin >> _data[i];
}
现在我需要创建自己的排序方法,我想我会使用快速排序。我的问题是,我不知道该怎么做。
当我选择一个枢轴时,我该如何设置另外两个动态字符串数组来放入较低的值和较高的值,然后递归?在我开始将值放入其中之前,无法事先知道每个数组需要多大。
我想我可以做一些事情,比如将每个数组的大小定义为与被排序的数组相同,然后如何从末尾删除任何不需要的空格,但我不确定这是否可能?
任何帮助将不胜感激。
附:我知道 std::sort,我已经在程序中有这个,我只是想自己实现一个排序。
【问题讨论】:
-
为什么不使用可变大小的 std::vector?
-
快速排序就地完成。您不需要创建额外的数组。
-
尝试使用 std::vector,而不是数组。
-
另外,如果您查看en.wikipedia.org/wiki/Quicksort,您会看到算法的“就地”版本不需要额外的内存。
-
您没有设置两个额外的阵列。您就地对原始阵列进行分区。这意味着您对数组中的元素进行混洗,使较低的值位于较低端,较高的值位于较高端。查看维基百科文章以了解它是如何完成的。甚至还有 youtube 视频。
标签: c++ arrays sorting dynamic quicksort