Шейкерная сортировка или двунаправленная пузырьковая сортировка - PullRequest
1 голос
/ 27 января 2012

В настоящее время я прохожу курс «Структура данных и алгоритм», и часть упражнения заключается в реализации алгоритма сортировки шейкера с 3 для циклов.В фрагменте кода содержится несколько ошибок, которые я исправил, но есть одна вещь, которую я не уверен, почему я получаю это: когда я инициализирую массив размером 12, мое первое значение индекса не сортируется, я не понимаюЗачем. Вот мой код:

// Method which will sort an array by using the shakersort algorithm
public void shakerSort(int[] array)
{      

    for (int p = 1; p < array.length-1; p++)
    {

        for (int i = p-1; i < array.length-2; i++)
        {                
            if (array[i] > array[i+1])
            {
                super.swap(array, i, i+1);
            }            
        }

        for (int i = array.length-p-1; i > 0; i--)
        {
            if (array[i] > array[i+1])
            {
                super.swap(array, i, i+1);
            }
        }

    }

Мой результат был таким:

  • Элемент 0: 53
  • Элемент 1: 27
  • Элемент 2: 28
  • Элемент 3: 53
  • Элемент 4: 90
  • Элемент 5: 72
  • Элемент 6: 80
  • Элемент 7: 67
  • Элемент 8: 2
  • Элемент 9: 33
  • Элемент 10: 45
  • Элемент 11: 91
  • После сортировки ...
  • Элемент 0: 27
  • Элемент 1: 2
  • Элемент 2: 28
  • Элемент 3: 33
  • Элемент 4: 45
  • Элемент 5: 53
  • Элемент 6: 53
  • Элемент 7: 67
  • Элемент 8: 72
  • Элемент 9: 80
  • Элемент 10: 90
  • Элемент 11: 91

Спасибо за ваше время и помощь

-Даниель

1 Ответ

3 голосов
/ 27 января 2012

Мне кажется, что ваш код вообще не использует array[0].

В последнем цикле вы можете поменять местами i и i-1, а не i+1.

Кроме того, AFAIK, это не шейкер и не пузырьковая сортировка: вам нужно сделать основной цикл с двумя вложенными циклами внутри, один из которых идет от 0 до размера-1, а другой - от размера-1 до 0и между циклами проверьте, если вам пришлось поменяться местами, если нет, то ваш массив отсортирован.

Посмотрите здесь для чистой реализации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...