@Fayson71

Как исправить программу (шейкерная сортировка)?

Помогите разобраться, в 28 строчке, где начинается первый цикл for самого алгоритма выдает ошибку, что индекс выходит за рамки массива:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BubbleSort
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = new int[5];
            int i = 0, left = 0, right = 4, last = 5, z;
            Random random = new Random();
            for (i = 0; i < a.Length; i++)
            {
                a[i] = 0 + random.Next(100);
            }
            foreach (int element in a)
                Console.Write(element + " ");
            Console.WriteLine();

            while (left < right)
            {
                for (i = right; i >= left; i--) //здесь ошибка
                {
                    if (a[i - 1] > a[i])
                    {
                        z = a[i - 1];
                        a[i] = a[i - 1];
                        a[i - 1] = z;
                        last = i;
                    }
                }
                left = last + 1;
                for (i = left; i < right; i++)
                {
                    if (a[i - 1] > a[i])
                    {
                        z = a[i - 1];
                        a[i] = a[i - 1];
                        a[i - 1] = z;
                    }
                }
                right = last - 1;
            }
            foreach (int element in a)
                Console.Write(element + " ");
            Console.ReadKey();
        }
    }
}
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 1
Matmode
@Matmode
PHP/Symfony Developer
Попробуйте i > left. Иначе у вас при i=0 получается доступ к не существующему элементу a[-1]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы