gpt4 book ai didi

c++ - 字符串数组的快速排序

转载 作者:太空宇宙 更新时间:2023-11-04 13:59:35 24 4
gpt4 key购买 nike

在到处浏览文章、教程和解决方案之后,我还没有遇到任何解释如何对字符串数组使用快速排序的内容。我找到的所有示例都是“int”或“char”。

这是我编辑的代码。

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <time.h>
#include <string>
#include <ctime>
#include <stdio.h>



using namespace std;

int count;
template <class T>
void printArray(T ar[], int sz);
template <class T>
void bubbleSort(T ar[], int sz);
void quickSortMain(string items[], int ct);
void quickSort(string items[], int left, int right);

//////////////////////////////////////////////////////////////////////////
// Main Function Implementation
//////////////////////////////////////////////////////////////////////////

int main() {
int numOfData = 50000;
string line, temp;
ofstream resultFile;
ofstream tableFile;
double data[100][2];
string patient[numOfData];
ifstream dataFile("shufflePatient.txt");
int i;
int SIZE = 0;

cout << "Program to shuffle data" << endl << endl;
cout << "This program will calculate swapping processes and running time.";


/*Storing data*/
cout << "Reading data in process.." << endl;
if (dataFile.is_open()) {
i=-1;
while (dataFile.good()) {
getline (dataFile, line);
if (i>=0) patient[i] = line;
i++;
}
dataFile.close();
}

SIZE = 5;
quickSortMain(patient, 5);


/*Writing to file*/
cout << "Writing to file.." << endl;
resultFile.open ("test.txt");
for (int i=0 ; i<numOfData ; i++) {
resultFile << patient[i] << "\n";
}
resultFile.close();
system("pause");
return 0;
}


void quickSortMain(string items[], int ct)
{
quickSort(items, 0, ct-1);
}


void quickSort(string items[], int left, int right)
{
int i, j;
char *x;
string temp[10];

i = left;
j = right;
x = items[(left+right)/2];

do {
while((strcmp(items[i],x) < 0) && (i < right)) {
i++;
}
while((strcmp(items[j],x) > 0) && (j > left)) {
j--;
}
if(i <= j) {
strcpy(temp, items[i]);
strcpy(items[i], items[j]);
strcpy(items[j], temp);
i++;
j--;
}
} while(i <= j);

if(left < j) {
quickSort(items, left, j);
}
if(i < right) {
quickSort(items, i, right);
}
}









//----------------------------------------------------------------------------
// prints array of size size
//----------------------------------------------------------------------------
template <class T>
void printArray(T patient[], int size)
{
for(int i = 0; i < size; i++)
cout << patient[i] << " ";
cout << endl;
}




//----------------------------------------------------------------------------
// sorts array of size size by Bubble Sort method
//----------------------------------------------------------------------------
template <class T>
void bubbleSort(T patient[], int size) //returning an int
{
bool noChange = true;
for(int i = size; i > 0; i--)
{
noChange = true;
for(int j = 1; j < i; j++)
{
if(patient[j] < patient[j - 1])
{
swap(patient[j], patient[j-1]);
count = count + 1;
noChange = false;
}
}
if (noChange)
return ;
}
}

我得到的错误是在这一行:

 x = items[(left+right)/2];

我变了

char x*;string x;

不知道对不对。现在我得到的错误是 strcmpstrcpy 没有声明。对我接下来应该做什么有什么帮助吗?

最佳答案

string patient[numOfData];

对比

template <class T>
void quickSortMain(char items[][10], int ct)

对比

quickSortMain(patient, 5);

quickSortMain需要一组 char[10] , 不是 string[] .不仅如此,它还依赖于一个模板参数。放下 template <class T>并替换 char[][10]string[] .

关于c++ - 字符串数组的快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19821846/

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