我目前正在学习数据结构和算法课程,而练习的一部分是实现具有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);
}
}
}
我的结果是:
感谢您的时间和帮助
-Daniel
答案 0 :(得分:3)
在我看来,您的代码根本不使用array[0]
。
在上一个循环中,您可能想要交换i
和i-1
,而不是i+1
。
另外,AFAIK,这不是振动器也不是冒泡类: 你需要做的是一个内部有2个嵌套循环的主循环,一个从0变为size-1,另一个从size-1变为0,在循环之间,测试你是否必须交换,如果不是,那么你的数组已排序。