C++中的字符串快速排序
String quicksort in c++
我正在尝试在 C++ 中使用快速排序实现字母表排序,但我做不到:(
下面是我的代码:
#include <iostream>
#include <string>
using namespace std;
int partition(string &str, int start, int end){
int pivot = str[end-1];
int i = start;
for(int j=start; j<end-1 ; j++){
if(str[j]<=pivot){
swap(str[j], str[i]);
i++;
}
}
swap(str[i], str[end]);
return i;
}
void quicksort(string &str, int start, int end){
if(start<end){
int pIndex = partition(str, start, end);
quicksort(str, start, pIndex-1);
quicksort(str, pIndex+1, end);
}
}
int main()
{
int t,k, end, start;
string str;
cin>>t;
for(k=0;k<t;k++){
cin>>str;
end = str.size();
quicksort(str, 0, end);
for(int l=0; l<end; l++){
cout<<str[l];
}
cout<< "\n";
}
return 0;
}
请大家看一下,帮我看看哪里做错了? :(
提前致谢。
你的错误是在你的快速排序算法中,你只有 i
而没有 j
,就像一个结束边界。
你真的要实施吗?你可以使用
std::sort(str.begin(), str.end());
所以,如果您决定编写自己的快速排序,您可以尝试这样的事情
#include <stdio.h>
#include <string>
#include <iostream>
void quickSort(std::string &str, int left, int right) {
int i = left, j = right;
int mid = str[(left + right) / 2];
/* partition */
while (i <= j) {
while (str[i] < mid)
i++;
while (str[j] > mid)
j--;
if (i <= j) {
std::swap(str[i], str[j]);
i++; j--;
}
};
/* recursion */
if (left < j)
quickSort(str, left, j);
if (i < right)
quickSort(str, i, right);
}
int main()
{
std::string str;
std::cin >> str;
quickSort(str, 0, str.size()-1);
std::cout << str;
}
我正在尝试在 C++ 中使用快速排序实现字母表排序,但我做不到:(
下面是我的代码:
#include <iostream>
#include <string>
using namespace std;
int partition(string &str, int start, int end){
int pivot = str[end-1];
int i = start;
for(int j=start; j<end-1 ; j++){
if(str[j]<=pivot){
swap(str[j], str[i]);
i++;
}
}
swap(str[i], str[end]);
return i;
}
void quicksort(string &str, int start, int end){
if(start<end){
int pIndex = partition(str, start, end);
quicksort(str, start, pIndex-1);
quicksort(str, pIndex+1, end);
}
}
int main()
{
int t,k, end, start;
string str;
cin>>t;
for(k=0;k<t;k++){
cin>>str;
end = str.size();
quicksort(str, 0, end);
for(int l=0; l<end; l++){
cout<<str[l];
}
cout<< "\n";
}
return 0;
}
请大家看一下,帮我看看哪里做错了? :(
提前致谢。
你的错误是在你的快速排序算法中,你只有 i
而没有 j
,就像一个结束边界。
你真的要实施吗?你可以使用
std::sort(str.begin(), str.end());
所以,如果您决定编写自己的快速排序,您可以尝试这样的事情
#include <stdio.h>
#include <string>
#include <iostream>
void quickSort(std::string &str, int left, int right) {
int i = left, j = right;
int mid = str[(left + right) / 2];
/* partition */
while (i <= j) {
while (str[i] < mid)
i++;
while (str[j] > mid)
j--;
if (i <= j) {
std::swap(str[i], str[j]);
i++; j--;
}
};
/* recursion */
if (left < j)
quickSort(str, left, j);
if (i < right)
quickSort(str, i, right);
}
int main()
{
std::string str;
std::cin >> str;
quickSort(str, 0, str.size()-1);
std::cout << str;
}