Отсортировать массив по убыванию, используя функцию поиска максимального элемента массива - C#
Формулировка задачи:
Всем привет!
Суть такова:
Ввести одномерный массив A, вывести его. Найти номер максимального элемента массива. Отсортировать массив по убыванию, используя функцию поиска максимального элемента массива.
В программе не работает должным образом сортировка
Был дан пример (процедура и функция) на Pascal
P.S.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace sortMass
{
class Class
{
static int[] Input()
{
Console.WriteLine("введите размерность массива");
int n = int.Parse(Console.ReadLine());
int[] a = new int[n];
for (int i = 0; i < n; ++i)
try
{
{
Console.Write("a[{0}]= ", i);
a[i] = int.Parse(Console.ReadLine());
}
}
catch (FormatException)
{
Console.WriteLine("вводите только целые элементы");
Console.ReadLine();
Console.ReadKey();
break;
}
return a;
}
static void Print(int[] a)
{
for (int i = 0; i < a.Length; ++i)
Console.Write("{0} ", a[i]);
Console.WriteLine();
}
static int MaxMas(int[] a)
{
int max = a[0];
int p = 0;
for (int i = 0; i < a.Count(); i++)
{
if (a[i] > max)
{
max = a[i];
p = i;
}
}
return p;
}
static void Main()
{
int[] myArray = Input();
Console.WriteLine("Исходный массив:");
Print(myArray);
Console.ReadLine();
int p = MaxMas(myArray);
Console.Write("Номер максимального элемента массива: ");
Console.WriteLine(p);
for (int s = 0; s < myArray.Count(); s++)
{
int imax = MaxMas(myArray);
int tmp = myArray[imax];
myArray[imax] = myArray[s];
myArray[s] = tmp;
}
Console.WriteLine("Отсортированный массив:");
Print(myArray);
Console.ReadKey();
}
}
}function MaxMas (a,n:word; Mas: TMas ):word;
var i,P: word;
Max: integer;
begin
Max:= Mas[a];
P:=a;
for i := a to n do
if Mas[i] > Max then
begin
Max := Mas[i];
P :=i;
end;
MaxMas:=P;
end;
procedure SortMas (n:word; var Mas: TMas );
var s, IMax: word;
Max:integer;
begin
for s := 1 to n-1 do
begin
IMax:=MaxMas (s,n,Mas);
Max:=Mas[IMax];
Mas[IMax]:=Mas[s];
Mas[s]:=Max;
end;
end;
end.
Если честно, то не совсем понимаю саму суть этой сортировки через функцию поиска максимального элемента массива
Решение задачи: «Отсортировать массив по убыванию, используя функцию поиска максимального элемента массива»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace sortMass
{
class Class
{
static int[] Input()
{
Console.WriteLine("введите размерность массива");
int n = int.Parse(Console.ReadLine());
int[] a = new int[n];
for (int i = 0; i < n; ++i)
try
{
{
Console.Write("a[{0}]= ", i);
a[i] = int.Parse(Console.ReadLine());
}
}
catch (FormatException)
{
Console.WriteLine("вводите только целые элементы");
Console.ReadLine();
Console.ReadKey();
break;
}
return a;
}
static void Print(int[] a)
{
for (int i = 0; i < a.Length; ++i)
Console.Write("{0} ", a[i]);
Console.WriteLine();
}
static int MaxMas(int[] a, int startFrom) // Перегрузка, чтобы отсечь первые элементы массива
// Например startfrom == 2, входной массив {1, 2, 3, 4, 5, 6}, то MaxMas пример массив без первых двух элементов
{
int[] temp = new int[a.Count()-startFrom];
for (int i = 0; i < temp.Count(); i++)
temp[i] = a[i + startFrom];
return MaxMas(temp);
}
static int MaxMas(int[] a)
{
int max = a[0];
int p = 0;
for (int i = 0; i < a.Count(); i++)
{
if (a[i] > max)
{
max = a[i];
p = i;
}
}
return p;
}
static void Main()
{
int[] myArray = Input();
Console.WriteLine("Исходный массив:");
Print(myArray);
Console.WriteLine("Номер максимального элемента массива: {0}", MaxMas(myArray)); // p - индекс максимального элемента!
for (int s = 0; s < myArray.Count(); s++)
{
int imax = MaxMas(myArray, s) + s;
int temp; // Переменная, которая хранит значение для перекидывания элементов
// Меняем местами значения массива
temp = myArray[s];
myArray[s] = myArray[imax];
myArray[imax] = temp;
}
Console.WriteLine("Отсортированный массив:");
Print(myArray);
Console.ReadKey();
}
}
}