Java 振动筛排序或双向气泡排序
我目前正在学习数据结构和算法课程,其中一部分练习是使用3个for循环实现shaker排序算法。在代码片段中包含了一些错误,我已经修复了这些错误,但有一件事我不确定为什么会出现这种情况: 当我初始化一个大小为12的数组时,我的第一个索引值并没有排序,我不明白为什么这是我的代码: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) {
// 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和布尔变量。