Ich habe ein Problem mit der Einfügesortierfunktion. Während ich versuche, die Stimmen und Namen in absteigender Reihenfolge zu drucken. Die Stimmen scheinen zu funktionieren, aber der Name druckt aufsteigend statt absteigend. Nachdem ich in einem b c d e f für die Namen und 5 4 3 2 1 für die Stimmen stecken, sieht es wie folgt aus:Einfügesortierung in absteigender Reihenfolge in C++
Please input the canditate 1 name:
a
Please input the canditate 1 votes:
1
Please input the canditate 2 name:
b
Please input the canditate 2 votes:
2
Please input the canditate 3 name:
c
Please input the canditate 3 votes:
3
Please input the canditate 4 name:
d
Please input the canditate 4 votes:
4
Please input the canditate 5 name:
e
Please input the canditate 5 votes:
5
Candidate Votes Received % of Total Votes
a 5 33.33
b 4 26.67
c 3 20.00
d 2 13.33
e 1 6.67
Total 15
The winner of the elections is a.
Program ended with exit code: 0
Press any key to continue . . .
Der Kandidat e d c b a anstelle eines b c d e sein müssen.
Dies ist mein Code unten. Jede Hilfe wird geschätzt.
#include <iostream>
#include <string>
#include<iomanip>
using namespace std;
void insertionSort(double votes[], string name[], double len)
{
for (int i = 0; i < len - 1; i++)
{
int j = i + 1;
double temp = votes[j];
while (j > 0 && temp > votes[j - 1])
{
votes[j] = votes[j - 1];
j--;
votes[j] = temp;
}
string temp2 = name[j];
while (j > 0 && temp2 > name[j - 1])
{
name[j] = name[j - 1];
j--;
name[j] = temp2;
}
}
}
int main()
{
//Declaring variables
string *name;
double *votes;
double *percentage;
double total = 0;
int max = 0;
name = new string[5];
votes = new double[5];
percentage = new double[5];
//for condition for user to input Canditate names and the votes received
for (int i = 0; i < 5; i++)
{
cout << "Please input the canditate " << i + 1 << " " << "name: " << endl;
cin >> name[i];
cout << "Please input the canditate " << i + 1 << " " << "votes: " << endl;
cin >> votes[i];
total = total + votes[i];
}
//Q1 or Q2
//selectionSort(votes, name, 5);
insertionSort(votes, name, 5);
//printing out the Canditate, voters received, and % of total votes
cout << "Candidate" << "\t\t" << "Votes Received" << "\t\t" << "% of Total Votes" << endl;
//for loop in order to find % of total votes, winner of election
for (int i = 0; i < 5; i++)
{
if (votes[i]>votes[max])
max = i;
cout << name[i] << "\t\t\t" << fixed << setprecision(0) << votes[i] << "\t\t\t" << fixed << setprecision(2) << (votes[i] * 100/total) << endl;
}
//printing out the total and winner of the election
cout << "Total" << "\t\t\t" << fixed << setprecision(0) << total << endl;
cout << "The winner of the elections is " << name[max] << "." << endl;
delete[]name;
delete[]votes;
cout << "Program ended with exit code: 0" << endl;
return 0;
}
Empfehlung: die Benutzereingabe entfernen und eine Reihe von Werten in den Feldern hart codieren. Auf diese Weise sind Sie 1. Zeit sparen, den gleichen Mist wieder und wieder eingeben. 2. Immer den gleichen Eingang durch Tippfehler verfälscht. 3. Präsentieren Sie Ihren genauen Testfall denen von uns hier draußen im Internet. – user4581301