Сортировка обменом - 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];
}
}
}