Под сортировкой массива подразумевается процесс перестановки элементов массива, с целью размещения элементов массива в определенном порядке.
Например, для целых чисел А после сортировки по возрастанию должно выполняться условие:
A[1] £ A[2] £ A[3] £... £ A[size], где size – верхний индекс
Алгоритм сортировки:
1. Просмотреть массив от 1 элемента, найти min элемент и поместить его на место 1 элемента, а 1-й на место min.
2. Просмотреть массив от 2 элемента, найти min элемент в этой части массива и поместить его на место 2 элемента, а 2-й на место min.
3. И так далее до последнего элемента.
Элементы массива А
A[ 1 ]= 2
A[ 2 ]= 6
A[ 3 ]= -5
A[ 4 ]= 3
A[ 5 ]= 20
A[ 6 ]= -10
A[ 7 ]= 8
A[ 8 ]= 0
A[ 9 ]= 9
A[ 10 ]= -2
Сортировка массива
-10 6 -5 3 20 2 8 0 9 -2
-10 -5 6 3 20 2 8 0 9 -2
-10 -5 -2 3 20 2 8 0 9 6
-10 -5 -2 0 20 2 8 3 9 6
-10 -5 -2 0 2 20 8 3 9 6
-10 -5 -2 0 2 3 8 20 9 6
-10 -5 -2 0 2 3 6 20 9 8
-10 -5 -2 0 2 3 6 8 9 20
-10 -5 -2 0 2 3 6 8 9 20
Отсортированный массив
-10 -5 -2 0 2 3 6 8 9 20
Задача3. Отсортировать массив целых чисел по возрастанию.
static void Main(string[] args)
{
int[] A = new int[10]{2, 6, -5, 3, 20, -10, 8, 0, 9, -2};
// одномерный массив А из 10 целых чисел
|
|
int min; // минимальный элемент
int buf; // буфер для обмена элементами
int i,j,k; //счетчики цикла
for (i = 0; i < 10; i++)
Console.WriteLine("A[" + i + "]=" + A[i]);
Console.WriteLine();
Console.WriteLine("Сортировка массива");
Console.WriteLine();
for (i = 0; i < 9; i++)
{
min=i;
for (j = i+1; j < 10; j++)
if (A[j]<A[min]) min=j;
buf=A[i];
A[i]=A[min];
A[min]=buf;
for (k = 0; k < 10; k++)
Console.Write(" " + A[k]);
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("Массив отсортирован ");
Console.WriteLine();
for (k = 0; k < 10; k++)
Console.Write(" " + A[k]);
Console.ReadKey();
}
11.2. Расчет статистических показателей
Задача4. Рассчитать суммарное и среднее значение элементов заданного массива.
int[] N = {99, 10, 100, 18, 78, 23, 63, 9, 87, 49};
// одномерный массив А из 10 целых чисел
int sum=0; // суммарное значение
double avg; // среднее значение
for (int i = 0; i < 10; i++)
sum = sum + N[i];
avg=(double)sum/10;
Console.WriteLine("Сумма: "+ sum);
Console.WriteLine();
Console.WriteLine("Среднее: "+ avg);
Console.ReadKey();
int[,] N = {{-99,10,50,18},{78,-23,63,9},{87,49,-55,10},{16,8,95,-16}};
// двумерный массив N из 4x4 целых чисел
int c = 0; // счетчик для подсчета количества элементов
Console.WriteLine("Матрица N[4,4] целых чисел");
Console.WriteLine(); // Вывод матрицы
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
Console.Write(N[i, j].ToString("D2") + " "); // D2 – два десятичных элемента
Console.WriteLine();
}
Console.WriteLine();
int sum = 0; // суммарное значение
double avg; // среднее значение
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
{
sum = sum + N[i,j];
c=c+1;
}
avg = (double)sum / с;
Console.WriteLine("Результаты");
Console.WriteLine();
Console.WriteLine("Сумма: " + sum);
Console.WriteLine("Среднее: " + avg);
Console.ReadKey(); // Пауза
11.3. Использование генератора случайных чисел
Иногда в качестве элементов массива используют случайные числа, которые можно получить с помощью функции Random(), которая генерирует случайное число в диапазоне 0..1.
|
|
Перед первым обращением к функции Random() необходимо вызовом процедуры Random инициализировать программный генератор случайных чисел.
Пример ввода одномерного массива A с использованием программного генератора случайных чисел.
static void Main(string[] args)
{
int n = 0, N=10; // Переменные типа int
Console.WriteLine();
Random r = new Random(); // Для случайных чисел
int[] A = new int[N]; // Массив типа int
Console.WriteLine("Создан массив A случайных целых чисел");
Console.WriteLine();
Console.WriteLine ("Номер n" + " Значение A[n]");
for (n = 0; n < N; n++)
{
A[n] = r.Next(0, 100); // Генерация случайного числа в диапазоне от 0 до 99
Console.WriteLine(" {0} {1,10}", n, A[n]);
}
Console.WriteLine();
Console.WriteLine("Нажмите любую клавишу");
Console.ReadKey(); // Пауза
}
Как видно генератор выдает числа в диапазоне от 0 до 99
Задача5. Вычислить наименьший элемент Mmin массива M и его порядковый номер Nmin. Размерность массива N=10. В программе элементы массива создаются генератором случайных чисел.
int n = 0, N = 10, Nmin = 0, Mmin = 0; // Переменные типа int
Console.WriteLine();
Random r = new Random(); // Для случайных чисел
int[] M = new int[N]; // Массив типа int
Console.WriteLine("Создан массив M случайных целых чисел");
Console.WriteLine();
Console.Write("Номер n" + " Значение M[n]");
Console.WriteLine();
for (n = 0; n < N; n++)
{
M[n] = r.Next(0, 100); // Генерация случайного числа
Console.WriteLine(" {0} {1,10}", n, M[n]);
}
Mmin = M[0]; // Предположение
Nmin = 0;
for (n = 1; n < N; n++)
if (M[n] < Mmin) // Обнаружение минимума
{
Mmin = M[n];
Nmin = n;
}
Console.WriteLine();
Console.WriteLine("Результаты");
Console.WriteLine();
Console.Write("Nmin="); // Вывод Nin
Console.WriteLine(Nmin.ToString());
Console.Write("Mmin="); // Вывод Mmin
Console.WriteLine(Mmin.ToString());
Console.WriteLine();
Console.WriteLine("Нажмите любую клавишу");
Console.ReadKey(); // Пауза
Залача6. Вывести квадратную матрицу X размером RxC в виде таблицы. Найти максимальное значение элемента и его координаты: номер строки R и номер столбца C.
{
int r=0, R=0, Rmax=0, c=0, C=0, Cmax=0, Mmax=0; // Переменные типа int
Console.WriteLine("Введите число строк R и столбцов матрицы");
Console.Write("Число строк R="); // Введите R
R = Convert.ToInt32(Console.ReadLine());
Console.Write("Число столбцов C="); // Введите C
C = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Random rnd = new Random(); // Для случайных чисел
int[, ] M = new int[R, C]; // Матрица M[R,C] типа int
for (r = 0; r < R; r++) // Внешний цикл по строкам
{
for (c = 0; c < C; c++) // Внутренний цикл по столбцам
{
int Mm = rnd.Next(0, 100); // Генерация случайного числа от 0 до 99
M[r,c] = Mm;
if (M[r,c] > Mmax) // Обнаружение максимума
{
Mmax = M[r,c]; // Значение максимума
Rmax = r+1; // Номер строки +1 для счета с 1, а не с 0
Cmax = c+1; // Номер столбца +1 для счета с 1, а не с 0
}
}
} // Вывод матрицы
Console.WriteLine("Создана матрица M[R,C] случайных целых чисел");
Console.WriteLine();
for (r = 0; r < R; r++)
{
for (c = 0; c < C; c++)
{
Console.Write(M[r, c].ToString("D2")+" ");
}
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("Результаты");
Console.WriteLine();
Console.Write("Максимальное значение Mmax="); // Вывод Mmax
Console.WriteLine(Mmax.ToString());
Console.Write("Номер строки Rmax="); // Вывод Rmax
Console.WriteLine(Rmax.ToString());
Console.Write("Номер столбца Cmax="); // Вывод Cmax
Console.WriteLine(Cmax.ToString());
Console.ReadKey(); // Пауза
}
По результату нужно проверить правильность исполнения алгоритма.
11.4. Массивы строк
Подобно другим типам данных строки могут быть собраны в массивы.
Задача7. В заданном строковом массиве заменить одни слова на другие.
string[ ] str = {"Это ","очень ","простой ","тест." };
Console.WriteLine("Исходный массив: ");
Console.WriteLine();
for (int i=0; i < str.Length; i++)
Console.Write(str[i] + " ");
Console.WriteLine("\n"); //Вывод на печать через клавишу Tab
// Изменяем строку
str[1]="тоже ";
str[3]="тест, не правда ли?";
Console.WriteLine("Модифицированный массив: ");
Console.WriteLine();
for (int i=0; i < str.Length; i++)
Console.Write(str[i]+" ");
Console.ReadKey(); // Пауза
Задача8. Ввести массив символов и заменить один из символов, например 'a' на другой, например 'x'. Подсчитать количество замен.
|
|
char[] Q = new char[10];
char a, x; int c=0; // Количество замен
Console.WriteLine("Ввод символов в массив Q");
for (int k = 0; k < 10; k++)
{
Console.Write("Введите {0}", k);
Console.WriteLine(" элемент массива Q");
Q[k] = Convert.ToChar(Console.ReadLine());
}
Console.WriteLine();
Console.WriteLine("Исходный массив Q: ");
foreach (char k in (char[])Q)
Console.Write("{0} ", k); //вывод элементов массива Q
Console.WriteLine();
for (int k=0; k < 10; k++)
if (Q[k] == 'a') // символ, который надо найти
{
Q[k] = 'x'; // символ, на который надо заменить
c = c + 1; // количество замен
}
Console.WriteLine();
Console.WriteLine("Модифицированный массив Q: ");
foreach (char k in (char[])Q)
Console.Write("{0} ", k); //вывод элементов массива S
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Количество замен ={0} ", c);
Console.ReadKey(); // Пауза