Сортировка обменом - C#
Формулировка задачи:
Здравствуйте, есть следующая сортировка, которая обменивает элементы массива упорядочивая их по возрастанию до тех пор, пока на каком то проходе этого не потребуется. Код:
Теперь есть вопрос: как можно улучшить этот алгоритм?
Пытался сделать так, чтобы с каждым проходом его длина уменьшалась на 1, но в таком случае сортируется только первая часть массива, как это можно реализовать?
Прикладываю наработки:
static int[] Sort(int[] mas) { bool flag; do { flag = false; for (int i = 0; i < mas.Length - 1; i++) { if (mas[i] > mas[i + 1]) { int temp = mas[i + 1]; mas[i + 1] = mas[i]; mas[i] = temp; flag = true; count++; } } } while (flag); return mas; }
static int[] SortOptim(int[] mas) { bool flag = true; for(int i=0; i<mas.Length-1&&flag; i++) { flag = false; for(int j=i+1; j<mas.Length-i;j++) { if(mas[i]>mas[j]) { int temp = mas[j]; mas[j] = mas[i]; mas[i] = temp; flag = true; count++; } } } return mas; }
Решение задачи: «Сортировка обменом»
textual
Листинг программы
for (int i = 0; i < arr.Length; i++) { for (int j = i + 1; j < arr.Length; j++) { if (arr[i] < arr[j]) { arr[j] ^= arr[i]; arr[i] ^= arr[j]; arr[j] ^= arr[i]; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д