int[] a = { 1, 5, 3, 6, 2, 4 }; int min = 0; int x; int m = 0; //счётчик проходов
//сортировка выбором
for (int i = 0; i < a.Length; i++) { // i - номер текущего шага min = i; x = a[i]; for (int j = i + 1; j < a.Length; j++) // цикл выбора наименьшего элемента { if (a[j] < x) { min = j; x = a[j]; // k - индекс наименьшего элемента } m = m + 1; } a[min] = a[i]; a[i] = x; // меняем местами наименьший с a[i]
} for (int i = 0; i < a.Length; i++) { Console.Write(a[i] + " "); } Console.WriteLine("Количество проходов сортировкой выбором: " + m);
//сортировка пузырьком
int[] b = { 1, 5, 3, 6, 2, 4 }; m = 0;
for (int i = 0; i < b.Length; i++) { // i - номер прохода for (int j = b.Length - 1; j > i; j--) { // внутренний цикл прохода if (b[j - 1] > b[j]) { x = b[j - 1]; b[j - 1] = b[j]; b[j] = x; } m = m + 1; } } for (int i = 0; i < b.Length; i++) { Console.Write(b[i] + " "); } Console.WriteLine("Количество проходов сортировкой пузырьком: " + m);
//сортировка вставками
int[] c = { 1, 5, 3, 6, 2, 4 }; m = 0;
for (int i = 1; i < c.Length; i++) { x = c[i]; int j = i - 1; while (j >= 0 & c[j] > x) { c[j + 1] = c[j]; j--; m = m + 1; } c[j + 1] = x; }
for (int i = 0; i < c.Length; i++) { Console.Write(c[i] + " "); } Console.WriteLine("Количество проходов сортировкой вставками: " + m);
//Сортировка Шелла
int[] arr = { 1, 5, 3, 6, 2, 4 }; int step = arr.Length / 2; m = 0;
while (step > 0) { for (int i = 0; i < (arr.Length - step); i++) { int j = i; while ((j >= 0) && (arr[j] > arr[j + step])) { int tmp = arr[j]; arr[j] = arr[j + step]; arr[j + step] = tmp; j--; m = m + 1; } } step = step / 2; } for (int i = 0; i < c.Length; i++) { Console.Write(arr[i] + " "); } Console.WriteLine("Количество проходов сортировкой Шелла: " + m);
На википедии есть хорошая теория по всем видам сортировок. А на викибукс реализация этих сортировок на различных языках программирования. Там же можно посмотреть и о более сложных сортировках. Ссылка на перечень сортировок.
Не забывайте, что сортировка используется очень часто и желательно знать парочку способов, или просто иметь их реализацию у себя на компьютере.
Теги: сортировка массивов C#
|