我正在编写一种方法,按照从“最老”到“最年轻”的顺序对日期进行排序。
阵列的第一个单元格将是最早的日期。
空单元格(包含零)将位于数组的末尾。
功能:
firstfree()
日期数组中的第一个日期为“零”,如果它为非零,则返回-1。isfree()
- >如果日期为“零”则返回true 问题:它不会更改“从最老到最年轻”的所有日期。
void Calendar::sortDates()
{
MyDate *Date_S;
MyDate zero;
int index = 0;
int sumDigit = 0;
Date_S = new MyDate[29]; // max 30 days by defention of exercise
if (this->firstFree() == -1) //array of "zero"
{
return;
}
else
{
for (int i = 0; i<29; i++) // moving dates not "zero" to Dates_S
if (this->isFree(i + 1) == false)
{
Date_S[index] = Dates[i];
index++;
}
for (int i = 0; i < 29; i++)
{
for (int j = 0; j < 29 - j - i; j++)
{
if (Date_S[j].isBefore(Dates[j + 1]) == false) // bubble sort of Dates_S in
{
zero = Date_S[j];
Date_S[j] = Date_S[j + 1];
Date_S[j + 1] = zero;
}
}
}
for (index; index < 30; index++) // copying "zero" dates to the end of Dates_S
{
Date_S[index].setZero();
}
for (int i = 0; i < 30; i++) // shallow copy , just integers
{
Dates[i] = Date_S[i];
}
}
}