需要帮助通过指针排序数组

时间:2013-10-08 00:54:29

标签: c++ sorting

所以我需要通过Pointers按引用排序动态数组。

用户输入一个不确定数量的等级,他/她表示结束,手动输入等级。

我需要按升序排序这些成绩,我感觉好像我非常接近,虽然我的输出给了我真正的随机数字但我不知道原因,我不能真正改变任何东西,因为我我认为我在正确的轨道上,但我无法在输出中找出这些随机数。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <ctime>
#include <cstdlib>

using namespace std;
    void swap (int *num1, int *num2)
{
int temp = *num1;
*num1=*num2;
*num2 = temp;
}

void Order(int Gnum[], int Gtot)
{
for (int i = 0; i < Gtot; i++)
{
    for (int j = i + 1; j < Gtot; j++)
        if (Gnum[i] > Gnum[j])
        {
            swap(Gnum[i], Gnum[j]);

        }
    cout << Gnum[i];
}

}
int main() {

int input;
int input2;

cout << "Please input number of Grades" << endl;
cin >> input2;
cout << "Please input Grades" << endl;
cin >> input;
for (int i = 1; i < input2; i++)
{
    cin >> input;
}

Order(&input, input2);
return 0;
}

2 个答案:

答案 0 :(得分:0)

以下是您的代码的运行版本,请参阅不同的内容:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <ctime>
#include <cstdlib>

using namespace std;
void swap (int *num1, int *num2)
{
    int temp = *num1;
    *num1=*num2;
    *num2 = temp;
}

void Order(int Gnum[], int Gtot)
{
    for (int i = 0; i < Gtot; i++)
    {
        for (int j = i + 1; j < Gtot; j++)
        if (Gnum[i] > Gnum[j])
        {
            swap(&Gnum[i], &Gnum[j]);

        }
        cout << Gnum[i] << " ";
    }
    cout << endl;
}

int main() {

    int *input;
    int input2;

    cout << "Please input number of Grades" << endl;

    cin >> input2;
    input = new int[input2];

    for (int i = 0; i < input2; i++)
    {
        cout << "please input grade " << i << ": ";
        cin >> input[i];
    }

    Order(input, input2);
    delete [] input;
    system("pause");
    return 0;
}

答案 1 :(得分:0)

首先,交换不会帮助您订购指针数组。第二,我会在你的命令函数中创建一个与初始数组大小相同的指针数组,然后在void Order(////)中执行以下命令:

for (int i = 0; i < initArraySize; ++i){
   int index = 0;
   int lowest = initArr[0];
   for (int j = 0; j < initArraySize; ++j){
       if (lowest > initArr[i]){
          lowest = initArr[i];
          index = i;
       }
   }
   newArr[0] = lowest;
   initArr[index] = 100000; //so that this won't be looked at again
}

delete [] initArr;

initArr = newArr;