冒泡排序应该基于工资数组。在工资按升序排序后,员工ID,工资率和工时应该发生变化。我能够对工资率进行排序,但我的员工身份信息保持不变。我需要另一个while while循环吗?
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
// Constant for the array size.
const int ARRAY_SIZE = 4;
// Function Prototypes
void getEmployeeInfo(long [], int [], double [], double [], int);
void bubbleSort(long empId[],int hours[],double payRate[],double wages[],int size);
void displayWages(long empId[], double wages[], int size);
int main()
{
// Array of employee ID numbers
long empId[ARRAY_SIZE] = { 5658845, 4520125, 7895122,
8777541};
// Array to hold the hours worked for each employee
int hours[ARRAY_SIZE] = {0};
// Array to hold the hourly pay rate for each employee
double payRate[ARRAY_SIZE] = {0};
// Array to hold the gross wages for each employee
double wages[ARRAY_SIZE] = {0};
// Get the employee payroll information and store
// it in the arrays.
getEmployeeInfo(empId, hours, payRate, wages, ARRAY_SIZE);
// Display the payroll information.
displayWages(empId, wages, ARRAY_SIZE);
// Sort the payroll information in ascending order with a bubble sort.
bubbleSort(empId, hours, payRate, wages, ARRAY_SIZE);
// Display the payroll information again.
displayWages (empId, wages, ARRAY_SIZE);
system("PAUSE");
return 0;
}
// ********************************************************
// The getEmployeeInfo function receives four parallel *
// arrays as arguments. The 1st array contains employee *
// IDs to be displayed in prompts. It asks for input and *
// stores hours worked and pay rate information in the *
// 2nd and 3rd arrays. This information is used to *
// calculate gross pay, which it stores in the 4th array. *
// ********************************************************
void getEmployeeInfo(long emp[], int hrs[], double rate[],
double pay[], int size)
{
cout << "Enter the requested information "
<< "for each employee.\n";
// Get the information for each employee.
for (int count = 0; count < size; count++)
{
cout << "\nEmployee #: " << emp[count] << "\t";
// Get this employee's hours worked.
cout << "Hours worked: ";
cin >> hrs[count];
// Validate hours worked.
while (hrs < 0)
{
cout << "\nHours worked must be 0 or more. "
<< "Please re-enter: ";
cin >> hrs[count];
}
// Get this employee's pay rate.
cout << "\tPay rate: $";
cin >> rate[count];
// Validate the pay rate.
while (rate[count] < 6.00)
{
cout << "\nPay rate must be 6.00 or more. "
<< "Please re-enter: $";
cin >> rate[count];
}
// Calculate this employee's gross pay.
pay[count] = hrs[count]*rate[count];
// ADD statement to calculate wages by multiplying
// hours with rate of pay;
}
}
// ********************************************************
// The bubbleSort function sorts the information based on *
// the wages array. *
// ********************************************************
void bubbleSort(long empId[],int hours[],double payRate[],double wages[],int size)
{
bool swap;
int index;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
if (wages[count] > wages [count + 1])
{
index = wages[count];
wages[count] = wages[count + 1];
wages[count + 1] = index;
swap = true;
}
}
} while (swap);
}
// ********************************************************
// The displayWages function displays employee ID numbers *
// and their wages. *
// ********************************************************
void displayWages(long empId[], double wages[], int size)
{
// Set up the numeric output formatting.
cout << fixed << showpoint << setprecision(2) << endl;
// Display the header.
cout << "----------------------------\n";
cout << "Employee Wages\n";
cout << "----------------------------\n\n";
// Display each employee's pay.
for (int count = 0; count < ARRAY_SIZE; count++)
{
cout << "Employee #" << empId[count] << " $";
cout << setw(7) << wages[count] << endl << endl;
}
}
答案 0 :(得分:0)
在您更换salary数组的两个元素的bubbleSort函数中,您还需要交换empId,hours和payRate数组的相应元素。此外,您需要为临时交换变量使用与您交换的值相同的类型,否则您将无法转换为int。
void bubbleSort(long empId[],int hours[],double payRate[],double wages[],int size)
{
bool swap;
double temp1;
int temp2;
long temp3;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
// compare the wages, because that is what you are sorting on
if (wages[count] > wages [count + 1])
{
// swap all the data between the two array positions:
temp1 = wages[count];
wages[count] = wages[count + 1];
wages[count + 1] = temp1;
temp1 = payRate[count];
payRate[count] = payRate[count + 1];
payRate[count + 1] = temp1;
temp2 = hours[count];
hours[count] = hours[count + 1];
hours[count + 1] = temp2;
temp3 = empId[count];
empId[count] = empId[count + 1];
empId[count + 1] = temp3;
swap = true;
}
}
} while (swap);
}
答案 1 :(得分:0)
创建一个交换辅助函数
void swaphelper(long (&emp)[] , doubles(&wages)[] ,doubles(&payrate)[] , int(&hours)[], int fromIndex , int toIndex)
{
emp[fromIndex] = emp[fromIndex]^emp[toIndex];
emp[toIndex] = emp[toIndex]^emp[fromIndex];
wages[fromIndex] = wages[fromIndex]^wages[toIndex];
wages[toIndex] = wages[toIndex]^wages[fromIndex];
payrate[fromIndex] = payrate[fromIndex]^payrate[toIndex];
payrate[toIndex] = payrate[toIndex]^payrate[fromIndex];
hours[fromIndex] = hours[fromIndex]^hours[toIndex];
hours[toIndex] = hours[toIndex]^hours[fromIndex];
}
void bubbleSort(long empId[],int hours[],double payRate[],double wages[],int size)
{
bool swap;
int index;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
if (wages[count] > wages [count + 1])
{
swaphelper( emp , wages , pirate , hours , count , count+1); // can be abstracted to a struct
swap = true;
}
}
} while (swap);
}