Сортировка выбора строк в переполнении стека

Нужна помощь со строкой для моего выбора сортировки. Вот что у меня так далеко.

#include "stdafx.h"#include <iostream>
#include <string>
using namespace std;

//Constant globals
const int NUM_NAMES = 20;

//Function protoypes
void selectionSort(string [], int);
void showArray(const string [] , int);

int main()
{
string names[NUM_NAMES] = {"Collins, Bill", "Smith, Bart", "Allet, Jim",
"Griffin, Jim", "Stamey, Marty", "Rose, Geri",
"Taylor, Terri", "Johnson, Jill",
"Aliison, Jeff", "Weaver, Jim", "Pore, Bob",
"Rutherford, Greg", "Javens, Renee",
"Harrison, Rose", "Setzer, Cathy",
"Pike, Gordon", "Holland, Beth"};

char again; //Hold y to repeat

do
{
//Show array
cout << "The unsorted values are\n";
showArray(names, NUM_NAMES);

//Sort array
selectionSort(names, NUM_NAMES);

//Display sorted array
cout << "The sorted values are\n";
showArray(names, NUM_NAMES);

//Run program again?
cout << "Would you like to run the program again? (Y/N): ";
cin >> again;
}while(again == 'y' || again == 'Y');
return 0;
}

Обновил мой код, и он отлично работает. Изменено minValue с int на строку.

void selectionSort(string array[], int NUM_NAMES)
{
int startScan, minIndex;
string minValue;

for(startScan = 0; startScan < (NUM_NAMES -1); startScan++)
{
minIndex = startScan;
minValue = array[startScan];
for(int index = startScan +1; index < NUM_NAMES; index++)
{
if (array[index] < minValue)
{
minValue = array[index];
minIndex = index;
}
}
array[minIndex] = array[startScan];
array[startScan] = minValue;
}
}

Если кто-то может помочь мне здесь, это было бы очень признательно.

0

Решение

minValue = array[startScan];

Вы присваиваете строку int. Сделайте тип minValue как string, Тогда это должно работать.

1

Другие решения

c ++ и stl делают сортировку выбора намного проще и элегантнее (строки или целые числа независимо от)

vector<string> v={"chandler","joey","phoebe","ross","rachel","monica"};
for(auto i=v.begin();i!=v.end();i++)
iter_swap(i, min_element(i,v.end()));
for(auto&x : v) cout<<x<<" ";//printing the sorted vector

если вы не используете c ++ 14, просто измените auto на векторный итератор.

0

Это может помочь:

import java.util.Arrays;

public class StringSort {
public static void main(String[] args){

final int nu_names = 20;
String names[ ] = new   String[nu_names];
names = new String[]{"Collins, Bill", "Smith, Bert", "Allen, Jim",
"Griffin, Jim", "Stamey, Marty", "Rose, Geri",
"Taylor, Terri", "Johnson, Jim",
"Allison, Jeff", "Looney, joe", "Wolfe, Bill",
"James, Jean", "Weaver, Jim", "Pore, Bob",
"Rutherford, Greg", " Javens, Renee",
"Herrison, Rose", "Setzer, Cathy",
"Pike, Gordon", "Holland, Beth"};

sort(names);
System.out.print(Arrays.toString(names));// print names

}
//sort method
public static void sort(String[] names){
String currentName = "";
int currenIndex = 0;
for(int i = 0; i < names.length - 1; i++){
currentName = names[i];
currenIndex = i;
for(int j = i + 1; j < names.length; j++){
if(currentName.compareTo(names[j]) > 0) {
currentName = names[j];
currenIndex = j;
}
}
swap(names, i,currenIndex );
}
}
//Swap when necessary
public static void swap(String[] names, int a, int b){
String temp = names[a];
names[a] = names[b];
names[b] = temp;
}
}
0
По вопросам рекламы [email protected]