我必须在动态字符串数组上实现自己的排序,例如这样的数组是:
string * sortArray;
然后我从文本文件中读取数组的大小,并根据需要制作数组并填充它。所以,我有......
sortArray = new string[_numberOfNames];
for(int i = 0; i < _numberOfNames; ++i){
sin >> _data[i];
}
现在我需要创建自己的排序方法,我想我会选择quicksort。我的问题是,我不知道如何去做。
当我选择一个数据透视表时,我怎样才能设置两个更动态的字符串数组来将更低的值和更高的值放入,然后递归?在开始将值放入其中之前,无法预先知道每个数组需要多大的数量。
我认为我可以做一些事情,例如将每个数组的大小定义为与正在排序的数组相同,然后一些如何从末尾删除任何不需要的空白空间,但我不确定这是否可能?< / p>
非常感谢任何帮助。
P.S。我知道std :: sort,我已经在程序中有这个,我只是想自己实现一个排序。
答案 0 :(得分:1)
上述评论中的两个选项:
1。)使用std :: vector。那里你可以有可变大小的数组。
2。)使用快速排序的“就地”版本,在原始数组中进行排序。见http://en.wikipedia.org/wiki/Quicksort#In-place_version
答案 1 :(得分:0)
假设您有阵列大小N
您的透视值为x
你应该做的就是那样,有一个指向开头(0)和一个到结尾(N-1)的两个指针。他们都应该向中间移动。当开始指针值大于x
并且结束指针值低于x
时,切换它们的值。在您完成并将x
放置在他的新位置(符合两个指针的位置)之后,将继续递归,左侧为x
,右侧为x
。