Сортировка массива

Под сортировкой массива подразумевается процесс перестановки элементов массива, с целью размещения элементов массива в определенном порядке.

Например, для целых чисел А после сортировки по возрастанию должно выполняться условие:

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(); // Пауза


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: