Java 振动筛排序或双向气泡排序

Java 振动筛排序或双向气泡排序,java,algorithm,data-structures,Java,Algorithm,Data Structures,我目前正在学习数据结构和算法课程,其中一部分练习是使用3个for循环实现shaker排序算法。在代码片段中包含了一些错误,我已经修复了这些错误,但有一件事我不确定为什么会出现这种情况: 当我初始化一个大小为12的数组时,我的第一个索引值并没有排序,我不明白为什么这是我的代码: // Method which will sort an array by using the shakersort algorithm public void shakerSort(int[] array) {

我目前正在学习数据结构和算法课程,其中一部分练习是使用3个for循环实现shaker排序算法。在代码片段中包含了一些错误,我已经修复了这些错误,但有一件事我不确定为什么会出现这种情况: 当我初始化一个大小为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);
            }
        }

    }
//使用shakersort算法对数组进行排序的方法
公共void shakerSort(int[]数组)
{      
for(int p=1;p数组[i+1])
{
超级交换(数组,i,i+1);
}            
}
对于(int i=array.length-p-1;i>0;i--)
{
if(数组[i]>数组[i+1])
{
超级交换(数组,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

在我看来,您的代码根本没有使用数组[0]

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

另外,好吧,这不是摇瓶或气泡排序: 您需要做的是一个主循环,内部有两个嵌套循环,一个从0到大小1,另一个从大小1到0,在循环之间,测试是否必须交换,如果不需要,则对数组进行排序


感谢您的回复,我能够让它工作。是的,这是一种摇壶/鸡尾酒排序。它的实现使用嵌套for循环,而不是do while和布尔变量。