振动筛分类或双向气泡分类

时间:2012-01-27 00:30:42

标签: java algorithm data-structures

我目前正在学习数据结构和算法课程,而练习的一部分是实现具有3个for循环的振动器排序算法。在代码片段包含一些错误,我修复了,但有一件事我不知道为什么我得到这个: 当我初始化大小为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

感谢您的时间和帮助

-Daniel

1 个答案:

答案 0 :(得分:3)

在我看来,您的代码根本不使用array[0]

在上一个循环中,您可能想要交换ii-1,而不是i+1

另外,AFAIK,这不是振动器也不是冒泡类: 你需要做的是一个内部有2个嵌套循环的主循环,一个从0变为size-1,另一个从size-1变为0,在循环之间,测试你是否必须交换,如果不是,那么你的数组已排序。

Take a look here for a clean implementation