Вывод элементов массива на консоль

void ArrayOutput(int* Arr, int Start, int N)

{

for (int i = Start; i < N; i++)

{

cout << Arr[i] << 'n';

}

getch();

}

Код программы на языке программирования С#

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace SortLab

{

class Program

{

 

static void Main()

{

Sort();

}

 

/*Основная программа*/

static void Sort()

{

 

int[] myint = { 99,88,77,66,55,44,33,22,11,8,5,3,1};

 

WriteArray(myint);

ShakerSort(myint);

WriteArray(myint);

 

Console.ReadLine();

 

}

/* Шейкер-сортировка */

static void ShakerSort(int[] myint)

{

int beg, end;

int count = 0;

 

for (int i = 0; i < myint.Length/2; i++) //можно переберать за кол-во итераций, в 2 раза меньше

{ //целочисленное деление округляет в меньшую сторону

beg = 0;

end = myint.Length - 1;

 

do

{

count += 2;

/* идем спереди */

if (myint[beg] > myint[beg + 1])

Swap(myint,beg,beg+1);

beg++;//сдвигаем позицию вперед

 

 

/* идем сзади */

if (myint[end-1] > myint[end])

Swap(myint, end - 1, end);

end--;//сдвигаем позицию назад

 

}

while (beg <= end);// условия усреднения

}

Console.Write("nКоличество сравнений = {0}n",count);

}

 

 

/* Поменять элементы местами */

static void Swap(int[] myint, int i, int j)

{

int glass;

glass = myint[i];

myint[i] = myint[j];

myint[j] = glass;

}

 

/*Вывести массив*/

static void WriteArray(int[] a)

{

foreach (int i in a)

Console.Write("{0}|", i);

Console.WriteLine("nnn");

}

}

}

Образно алгоритм можно описать так: на каждом шаге основного цикла рассматривается массив a[Left]÷a[Right], после выполнения двух внутренних циклов минимальный и максимальный элемент в исходном массиве перетекают к краям, минимальный в — a[Left], максимальный — в a[Right]. Пусть максимальный элемент имеет индекс k, тогда массив можно изобразить так: a[Left],a[1],..,a[k-1],A[k],a[k+1],..,a[Right];После сравнения A[k] с a[k+1] значение A[k] перейдет в k+1-ую ячейку,после сравнения k+1-ой c k+2-ой – в k+2-eю,и так далее,пока он не сместится в крайне правое положение с индексом Right. Аналогично для минимального. После выполнения цикла по всем подмассивам он отсортируется. Трассировка программы:

 

3 1 5 8 1 0 4 6 6 7

3 1 5 8 0 1 4 6 6 7

3 1 5 0 8 1 4 6 6 7

3 1 0 5 8 1 4 6 6 7

3 0 1 5 8 1 4 6 6 7

0 3 1 5 8 1 4 6 6 7 Left=1

0 1 3 5 8 1 4 6 6 7

0 1 3 5 1 8 4 6 6 7

0 1 3 5 1 4 8 6 6 7

0 1 3 5 1 4 6 8 6 7

0 1 3 5 1 4 6 6 8 7

0 1 3 5 1 4 6 6 7 8 Right=8

0 1 3 1 5 4 6 6 7 8

0 1 1 3 5 4 6 6 7 8 Left=3

0 1 1 3 4 5 6 6 7 8