我只是试图在字符串上实现Quicksort,但它不起作用.输出与输入相同,而不是排序字符串.我已经检查了很多次但是找不到任何错误.请帮帮我.
以下是quicksort功能.
void quicksort(string str1, int si, int ei)
{
if (si < ei)
{
int pi = partition(str1, si, ei);
quicksort(str1, si, pi-1);
quicksort(str1, pi+1, ei);
}
}
Run Code Online (Sandbox Code Playgroud)
分区功能.
int partition(string str2, int si, int ei)
{
int i = si-1;
char x = str2[ei];
int j;
for (j = si ; j <= ei-1 ; j++)
{
if (str2[j] <= x)
{
i++;
exchange(&str2[i], &str2[j]);
}
}
exchange(&str2[ei], &str2[i+1]);
return i+1;
}
Run Code Online (Sandbox Code Playgroud)
和交换功能.
void exchange(char *a, char *b)
{
char temp;
temp = *a;
*a = *b;
*b = temp;
}
Run Code Online (Sandbox Code Playgroud)
主要功能如下.
int main()
{
int l1;
string str;
cout << "Enter the string to be sorted";
cin >> str;
l1 = str.length();
quicksort(str, 0, l1-1);
cout << str;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
quicksort需要str1通过值,它然后循环地将其子问题.每个实例化都在一个单独的,不相关的字符串上运行,并对其本地副本进行修改.
你需要str通过引用传递:
void quicksort(string& str1, int si, int ei)
Run Code Online (Sandbox Code Playgroud)
同样适用于partition:
int partition(string& str2, int si, int ei)
Run Code Online (Sandbox Code Playgroud)