KostyeFromHelen
14. Несколько видов сортировок массивов
20.04.2011 08:29:49

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#


 

11
03.03.2013 18:38:23

Спасибо за код, оч помог

 
admin
03.03.2013 19:42:18

Не за что.

 


Программируем на C#, интересные статьи, книги, музыка; Костя Карпов.