using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace sort
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
int n = rand.Next(10, 100);
int[] array = new int[n];
int[] array2 = new int[n];
int[] array3 = new int[n];
int[] array4 = new int[n];
int[] array5 = new int[n];
int[] array6 = new int[n];
int i = 0, r, s, pere1 = 0, srav1 = 0, pere2 = 0, srav2 = 0, pere3 = 0, srav3 = 0, pere4 = 0, srav4 = 0, pere5 = 0, srav5 = 0, pere6 = 0, srav6 = 0;
bool h = true;
while (i < n)
{
r = rand.Next(0, 100);
array2[i] = array3[i] = array4[i] = array5[i] = array6[i] = array[i] = r;
i++;
}
Console.WriteLine("исходный масив\n");
foreach (int u in array2)
{
Console.Write(u.ToString() + ", ");
}
//==============================================================================================================================================================================================
for (i = 0; i < n; i++) {
for (int j = 0; j < n - 1; j++){
if(array[j] > array[j + 1])
{
s = array[j];
array[j] = array[j + 1];
array[j + 1] = s;
pere1 += 1;
}
srav1 += 1;
}
}
Console.WriteLine("\n\n\n");
Console.WriteLine("сортировка методом пузырька\n");
Console.WriteLine("сравнений - " + srav1.ToString());
Console.WriteLine("перестановок - " + pere1.ToString());
Console.WriteLine();
foreach (int c in array)
{
Console.Write(c.ToString() + ", ");
}
//==============================================================================================================================================================================================
while(h == true){
h = false;
for (int j = 0; j < n - 1; j++){
if(array2[j] > array2[j + 1])
{
s = array2[j];
array2[j] = array2[j + 1];
array2[j + 1] = s;
h = true;
pere2 += 1;
}
srav2 += 1;
}
}
Console.WriteLine("\n\n\n");
Console.WriteLine("сортировка методом усовершенствоного пузырька\n");
Console.WriteLine("сравнений - " + srav2.ToString());
Console.WriteLine("перестановок - " + pere2.ToString());
Console.WriteLine();
foreach (int u in array2)
{
Console.Write(u.ToString() + ", ");
}
//==============================================================================================================================================================================================
int start = 0, len = array3.Length, flag = 0;
while(start < len){
for(int loc = 0; loc < len-1; loc++){
if(array3[loc] > array3[loc + 1]){
flag = array3[loc];
array3[loc] = array3[loc + 1];
array3[loc + 1] = flag;
pere3++;
}
srav3++;
}
len--;
for(int loc = len; loc > start+1; loc--){
if(array3[loc] < array3[loc - 1]){
flag = array3[loc];
array3[loc] = array3[loc - 1];
array3[loc - 1] = flag;
pere3++;
}
srav3++;
}
start++;
}
Console.WriteLine("\n\n\n");
Console.WriteLine("сортировка методом шэйкера\n");
Console.WriteLine("сравнений - " + srav3.ToString());
Console.WriteLine("перестановок - " + pere3.ToString());
Console.WriteLine();
foreach (int u in array3)
{
Console.Write(u.ToString() + ", ");
}
//==============================================================================================================================================================================================
len = array4.Length - 1;
flag = 0;
int max = 0, cont = len;
while(len > 0){
for(int I = 0; I <= len; I++){
if(max < array4[I]){
max = array4[I];
cont = I;
}
srav4++;
}
if(max > array4[len]) {
flag = array4[len];
array4[len] = max;
array4[cont] = flag;
pere4++;
}
len--;
max = 0;
}
Console.WriteLine("\n\n\n");
Console.WriteLine("сортировка методом выбора\n");
Console.WriteLine("сравнений - " + srav4.ToString());
Console.WriteLine("перестановок - " + pere4.ToString());
Console.WriteLine();
foreach (int u in array4)
{
Console.Write(u.ToString() + ", ");
}
//===============================================================================================================================================================================================
len = array5.Length;
flag = 0;
for(int j = 1; j < len; j++){
flag = array5[j];
i = j-1;
while (i >= 0 && array5[i] > flag){
array5[i + 1] = array5[i];
i = i - 1;
srav5++;
}
if(flag < array5[i + 1]){
pere5++;
array5[i+1] = flag;
}
}
Console.WriteLine("\n\n\n");
Console.WriteLine("сортировка методом вставки c дыркой\n");
Console.WriteLine("сравнений - " + srav5.ToString());
Console.WriteLine("перестановок - " + pere5.ToString());
Console.WriteLine();
foreach (int u in array5)
{
Console.Write(u.ToString() + ", ");
}
//==============================================================================================================================================================================================
int J, step = array6.Length/2;
while(step > 0){
for(int I = 0; I < (array6.Length - step); I++){
J = I;
while((J >= 0) && (array6[J] > array6[J + step])){
int tmp = array6[J];
array6[J] = array6[J + step];
array6[J + step] = tmp;
J -= step;
pere6++;
srav6++;
}
}
step = step / 2;
}
Console.WriteLine("\n\n\n");
Console.WriteLine("сортировка методом шела\n");
Console.WriteLine("сравнений - " + srav6.ToString());
Console.WriteLine("перестановок - " + pere6.ToString());
Console.WriteLine();
foreach (int u in array6)
{
Console.Write(u.ToString() + ", ");
}
//==============================================================================================================================================================================================
Console.ReadKey();
}
}
}