所以我想按不同的標準排序數組,但這裏出現問題,當兩個項目具有相同的值,我想命名它的名稱。讓我用一個例子解釋: 我有這樣的:錯誤的功能排序在一個數組
俄亥俄州49
威斯康星州46
肯塔基州46
這將是我的數據結構:
const int US_STATES = 51;
const int MAX_INFO = 5;
struct Info{
double values;
int units, shipments;
};
typedef Info TaulaQuarters[MAX_INFO]; //Where TaulaQuarters[0] és el total i TaulaQUarters[1..4] son els trimestres
struct Estat{
string stateName,code;
int population;
TaulaQuarters taulaQuarters;
int totalPopulation;
};
typedef Estat TaulaEstats[US_STATES];
所以,威斯康星州和肯塔基州有相同的價值,但我想肯塔基州下的威斯康星州,因爲肯塔基州比威斯康星州字母大ically。 讓我告訴你我的主要排序操作:
bool esMajor (double n1, double n2, string nom1, string nom2, char criteri)
{
//pre:
//lpost:
int enter1 = int(n1);
int enter2 = int(n2);
bool hoEs = false;
if (criteri == 'v'){
if (n1 > n2) hoEs = true;
else if (n1 == n2){
if (nom1 > nom2) hoEs = true;
}
}
else if (criteri == 'u' or criteri == 's'){
if (enter1 > enter2) hoEs = true;
else if (enter1 == enter2){
if (nom1 < nom2) hoEs = true;
}
}
else if (criteri == 'n'){
if (nom1 < nom2) hoEs = true;
}
//else if()
return hoEs;
}
void ordena (TaulaEstats taulaEstats, char criteri)
{
//Pre:
//post:
//----Intializing----
Estat aux; aux.code = "--"; aux.population = 0; aux.stateName = "--"; aux.totalPopulation = 0;
for (int x = 0; x < 5; x++){
aux.taulaQuarters[x].shipments = 0; aux.taulaQuarters[x].units = 0; aux.taulaQuarters[x].values = 0;
}
//-------END---------
for (int i = 0; i < int(US_STATES);i++){
int j = i;
//if (criteri == 'v'){
while (j > 0 and esMajor(taulaEstats[j].taulaQuarters[0].values,taulaEstats[j-1].taulaQuarters[0].values,taulaEstats[j].stateName, taulaEstats[j-1].stateName, criteri)){
aux = taulaEstats[j-1];
taulaEstats[j-1] = taulaEstats[j];
taulaEstats[j]= aux;
j--;
}
}
}
凡esMajor
會告訴我根據的標準,如果第一個數字比第二個大,在同等情況下,會如果第一個告訴我名字大於第二個。 和ordena
只是我必須對我的數組進行排序的算法。
感謝您的幫助和節日快樂!
(對不起,我的英語雖然)。
我不能使用sort命令,並不得不開發對我自己,我不會使用對象,所以我還挺有沒有你在說什麼:( – magalenyo
的想法你。在你的代碼結構定義您與對象 – ForeverStudent