public static GeneralAveregeOfStudents[] ResizeArray(GeneralAveregeOfStudents[] oldArray, int difference)
 {
     var newArray = new GeneralAveregeOfStudents[oldArray.Length + difference];
     for (var i = 0; i < oldArray.Length; i++)
         newArray[i] = oldArray[i];
     return newArray;
 }
 public static void Swap(ref GeneralAveregeOfStudents x, ref GeneralAveregeOfStudents y)
 {
     var temp = y;
     y = x;
     x = temp;
 }
 public static GeneralAveregeOfStudents[] AddToArray(ref GeneralAveregeOfStudents[] array, GeneralAveregeOfStudents newValue)
 {
     array = ResizeArray(array, 1);
     array[array.Length - 1] = newValue;
     return array;
 }
        public static GeneralAveregeOfStudents[] GetStudentWithSmallestGeneralAverage(Catalog[] catalog,
            double generalAverage)
        {
            var studentsWithSmallestGeneralAverege = new GeneralAveregeOfStudents[0];

             var orderedStudents = GetOrderedSudentsByGeneralAverege(catalog);

            for(var i=0;i<orderedStudents.Length;i++)
                if (orderedStudents[i].GeneralAverage == generalAverage)
                    AddToArray(ref studentsWithSmallestGeneralAverege, orderedStudents[i]);

            return studentsWithSmallestGeneralAverege;
        }
        public static GeneralAveregeOfStudents[] GetStudentWithMostMarkOfTen(Catalog[] catalog)
        {
            var studentsWithNoMax = new GeneralAveregeOfStudents[0];

            var generalAverage = GetAllGeneralAveragePerStudent(catalog);
            var arrayNoMark = GetNoOfMarkPerStudent(catalog);
            var noMax = GetMaxVaule(arrayNoMark);

            for(var i=0;i<arrayNoMark.Length-1;i++)
                if (arrayNoMark[i] == noMax)
                    AddToArray(ref studentsWithNoMax, generalAverage[i]);

            return studentsWithNoMax;
        }
        public static GeneralAveregeOfStudents[] GetStudentWithGeneralAverage(GeneralAveregeOfStudents[] students,
            double generalAverage)
        {
            var min = 0;
            var max = students.Length-1;
            var studentWithGeneralAverage=new GeneralAveregeOfStudents[0];

            while (min <= max)
            {
                var middle = (min + max)/2;
                if (generalAverage == students[middle].GeneralAverage)
                    AddToArray(ref studentWithGeneralAverage, students[middle]);
                if (generalAverage > students[middle].GeneralAverage)
                    max = middle - 1;
                else
                {
                    min = middle + 1;
                }
            }
            return studentWithGeneralAverage;
        }
 public static GeneralAveregeOfStudents[] GetAllGeneralAveragePerStudent(Catalog[] catalog)
 {
     var generalAverage = new GeneralAveregeOfStudents[0];
     for (var i = 0; i < catalog.Length ; i++)
     {
         var newValue = GetGeneralAverage(catalog[i]);
         AddToArray(ref generalAverage, newValue);
     }
     return generalAverage;
 }