gpt4 book ai didi

C++ quicksort 排序字符串文本

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:30 24 4
gpt4 key购买 nike

我正在做作业,并完成了递归快速排序,但排序方式不正确。似乎它没有正确交换。

这是我的代码

#include<iostream>
#include<ctime>
#include<string>
using namespace std;


int quick_sort_help(string &text,int left, int right, int pivot){


char val = text[pivot];
char temp;

//swap
// temp =text[pivot];
//text[pivot]= text[right];
//text[right]=temp;

//swap(&text[left],&text[right]);

int l = left;
int r = right;

int i=left;
while (i<=r)
{
while (text[i]<val)
i++;
while (text[right]>val)
r--;
if (i<=r)
{
temp=text[i];
text[i]=text[r];
text[r]=temp;
i++;
r--;
}
}


return l;
}


void quicksort(string &text,int left, int right){

if (left < right){

int pivot=(left+right)/2;
int pivottwo = quick_sort_help(text, left, right, pivot);
quicksort(text, left, pivottwo - 1);
quicksort(text, pivottwo + 1, right);
}
}
void quick_sort(string &text,int size){
quicksort(text,0,size);}


int main()
{

string text="this is a test string text,.,!";
int size = text.length();
float t1, t2;
t1 = clock();
quick_sort(text,size);

t2=clock();
cout<<"quicksort Sort: "<<(t2-t1)/CLK_TCK*1000<<" msec\n";
cout<<text<<endl;


system("pause");
return 0;
}

我得到的输出:

hi  a e  e,g.nii,r!tssssxttttt

最佳答案

你必须:

1) 不要使用 size 而使用 size-1 值

void quick_sort(string &text,int size){
quicksort(text,0,size-1);}

2) Pivot 不是 (left+right)/2 而是 quick_sort_help 返回的值,pivottwo 不是必需的:

void quicksort(string &text,int left, int right)
{
if (left < right)
{
int pivot = quick_sort_help(text, left, right);
quicksort(text, left, pivot - 1);
quicksort(text, pivot + 1, right);
}
}

3) 在第二个 while 中测试我的 j 值(你的 r)并在返回枢轴(i 值)之前进行交换:

int quick_sort_help(string &text,int left, int right)
{
char val = text[right];
char temp;

int j = right;
int i = left - 1;

while (true)
{
while (text[++i] < val);

while (text[--j] > val) {
if(j == left)
break;
}

if(i >= j)
break;

temp=text[i];
text[i]=text[j];
text[j]=temp;
}

temp=text[i];
text[i]=text[right];
text[right]=temp;

return i;
}

关于C++ quicksort 排序字符串文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10180197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com