2013-10-08 49 views
-1

所以我需要通過引用通過指針進行排序的動態數組。需要幫助通過指針對數組進行排序

用戶輸入一個不確定數量的等級,他/她表示結束,等級手動輸入等級。

我需要按照升序對這些成績進行排序,我覺得我好像很接近,儘管我的輸出給了我非常隨機的數字,我不知道原因,而且我也不能改變任何事情,因爲我想我在正確的軌道上,但我無法找出輸出中的這些隨機數字。

#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; 
} 
+0

請標記所有作業問題爲C. – yngccc

+0

您的排序過程是錯誤的,並且在排序過程完成之前打印您的號碼。 – us2012

+1

*數組在哪裏?* – Beta

回答

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; 
} 
+0

我看到我做錯了,我沒有完全理解input = new int [input2]的概念;線。 但是我認爲你所做的事情我能夠更好地理解我在那裏的地位。非常感謝。 – user2305960

+0

「input = new int [input2];」行在堆內存中分配int「input2」數字的動態內存,並將該內存位置保存爲「輸入」指針。您可以在此鏈接閱讀有關動態內存分配的更多信息:[動態內存](http://www.cplusplus.com/doc/tutorial/dynamic/) –

0

首先,交換不會幫你訂購指針數組。第二個我想,在您的訂單功能創建相同大小的指針數組爲您最初的數組,然後執行以下內無效訂單(////):

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; 
相關問題