Решено вставка с дыркой

z0day

Green Team
06.07.2018
134
33
BIT
0
Извиняюсь за тупой вопрос честно пыталась гуглить, делать сама но не получается и не кто из наших слайд с этим алгоритмом естественно не сфоткал
а для лабораторки по ПЯВУ (программирование на языке высокого уравня) надо
у меня вместо алгоритма получается вот такая фигня
int len = array5.Length - 1, flag;
i = 1;
while(i > 0){
flag = array5[len];
h = false;
for(int I = len - 1; I >= 0; I--){
if(flag <= array5){
array5[I + 1] = array5;
array5 = flag;
}
else{
array5[I + 1] = array5;
array5 = flag;
h = true;
}
}
if(h == false){
len--;
}
i--;
}


foreach (int u in array5)
{
Console.Write(u.ToString() + ", ");
}

вывод

исходный массив

48, 17, 7, 45, 47, 0, 74, 38, 16, 15,

сортировка методом вставки c дыркой

15, 48, 17, 7, 45, 47, 0, 74, 38, 16,
 

wj6zc

Green Team
06.07.2018
17
11
BIT
0
пыталась гуглить
Было бы неплохо ещё указать на каком языке вы пишете.
Вот здесь найдётся ответ:


Пользуйтесь тегом CODE
Код:
 [CODE] some code [/ CODE] (без пробела в закрывающем теге)

C#:
int len = array5.Length - 1, flag;
i = 1;
while(i > 0){
  flag = array5[len];
  h = false;
  for(int I = len - 1; I >= 0; I--){
    if(flag <= array5){
      array5[I + 1] = array5;
      array5 = flag;
    }
    else{
      array5[I + 1] = array5;
      array5 = flag;
      h = true;
    }
  }
  if (h == false){
    len--;
  }
  i--;
}
foreach (int u in array5){
  Console.Write(u.ToString() + ", ");
}
 
  • Нравится
Реакции: z0day и explorer

z0day

Green Team
06.07.2018
134
33
BIT
0
Было бы неплохо ещё указать на каком языке вы пишете.
Вот здесь найдётся ответ:


Пользуйтесь тегом CODE
Код:
 [CODE] some code [/ CODE] (без пробела в закрывающем теге)

C#:
int len = array5.Length - 1, flag;
i = 1;
while(i > 0){
  flag = array5[len];
  h = false;
  for(int I = len - 1; I >= 0; I--){
    if(flag <= array5){
      array5[I + 1] = array5;
      array5 = flag;
    }
    else{
      array5[I + 1] = array5;
      array5 = flag;
      h = true;
    }
  }
  if (h == false){
    len--;
  }
  i--;
}
foreach (int u in array5){
  Console.Write(u.ToString() + ", ");
}
спасибо но это не то в том то и проблема что мне нужен не какой нибудь а конкретно этот алгоритм
язык С#
 
Последнее редактирование:

wj6zc

Green Team
06.07.2018
17
11
BIT
0
мне нужен конкретно этот алгоритм
Так вы вряд ли научитесь писать свой код. Копипаст - это не выход.
Не знаю, что за метод вставок _с дырками_ такой. Объясните, буду знать.
Вот сортировка вставками:
Судя по вашему коду - это то что вы ищете, но ещё не осознали, что это именно оно.
Или нет.
 

z0day

Green Team
06.07.2018
134
33
BIT
0
Так вы вряд ли научитесь писать свой код. Копипаст - это не выход.
Не знаю, что за метод вставок _с дырками_ такой. Объясните, буду знать.
Вот сортировка вставками:
Судя по вашему коду - это то что вы ищете, но ещё не осознали, что это именно оно.
Или нет.
я почти не использую копипаст но этот алгоритм меня достал как бы там не было я нашла его псевдо код вот решение на с#
Код:
                               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;
                                }
                              }
 

wj6zc

Green Team
06.07.2018
17
11
BIT
0
Это не псевдокод, а вы не можете понять, что вам нужен обычный метод вставками.
Говоря о том куске спагетти, который вы прилагаете.
Во-первых: он не работает, потому что вырван откуда-то. Могу посоветовать только удалить его, чтобы не маячил перед глазами. Вероятно вы пытаетесь написать что-то внятное, но постоянно обращаетесь к нерабочему примеру.
Во-вторых: если его хоть мало-мальски привести к рабочему виду, делает абсолютно ту же самую сортировку методом вставки.
---
0. Гуглим какие методы сортировок бывают. На википедии смотрим красивую анимацию метода вставок.
1. Заходим на
2. Видим, что нам предлагают готовое решение: программа сортировки массива.
3. Понимаем, что сортировка реализована методом вставок.
4. Переписываем программу с нужными нам изменениями.
5. ?????
6. Профит.
C#:
using System;

class MainClass {
  public static void Main (string[] args) {
        int[] array = {48, 17, 7, 45, 47, 0, 74, 38, 16, 15};
        int len = array.Length;
        Console.Write($"Start array: \t");
        for (int i = 0; i < array.Length; i++){
            Console.Write($"{array[i]} ");
        }
        int temp;
        for (int i = 0; i < len-1; i++){
            for (int j = i+1; j < len; j++){
                if (array[i] > array[j]) {
                    temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        Console.Write("\nSorted array: \t");
        for (int i = 0; i < array.Length; i++){
            Console.Write($"{array[i]} ");
        }
    }
}
Код:
Console output:
Start array:   48 17 7 45 47 0 74 38 16 15 
Sorted array:  0 7 15 16 17 38 45 47 48 74
Надеюсь, это поможет. Если нет, то вижу только один вариант - обратиться напрямую к преподавателю за разъяснениями.
 

z0day

Green Team
06.07.2018
134
33
BIT
0
Это не псевдокод, а вы не можете понять, что вам нужен обычный метод вставками.
Говоря о том куске спагетти, который вы прилагаете.
Во-первых: он не работает, потому что вырван откуда-то. Могу посоветовать только удалить его, чтобы не маячил перед глазами. Вероятно вы пытаетесь написать что-то внятное, но постоянно обращаетесь к нерабочему примеру.
Во-вторых: если его хоть мало-мальски привести к рабочему виду, делает абсолютно ту же самую сортировку методом вставки.
---
0. Гуглим какие методы сортировок бывают. На википедии смотрим красивую анимацию метода вставок.
1. Заходим на
2. Видим, что нам предлагают готовое решение: программа сортировки массива.
3. Понимаем, что сортировка реализована методом вставок.
4. Переписываем программу с нужными нам изменениями.
5. ?????
6. Профит.
C#:
using System;

class MainClass {
  public static void Main (string[] args) {
        int[] array = {48, 17, 7, 45, 47, 0, 74, 38, 16, 15};
        int len = array.Length;
        Console.Write($"Start array: \t");
        for (int i = 0; i < array.Length; i++){
            Console.Write($"{array[i]} ");
        }
        int temp;
        for (int i = 0; i < len-1; i++){
            for (int j = i+1; j < len; j++){
                if (array[i] > array[j]) {
                    temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        Console.Write("\nSorted array: \t");
        for (int i = 0; i < array.Length; i++){
            Console.Write($"{array[i]} ");
        }
    }
}
Код:
Console output:
Start array:   48 17 7 45 47 0 74 38 16 15
Sorted array:  0 7 15 16 17 38 45 47 48 74
Надеюсь, это поможет. Если нет, то вижу только один вариант - обратиться напрямую к преподавателю за разъяснениями.

я знаю что это не псевдо код это уже мой код на с# и он действительно вырван из моей программы она длинная и я решила привести только сам алгоритм без инициализации массива и его вывода алгоритм работает и преподаватель его принял
 

z0day

Green Team
06.07.2018
134
33
BIT
0
можно
Код:
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();
        }
    }
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!