我目前正在学习数据结构和算法课程,一部分练习是用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);
}
}
}
我的结果是:
谢谢你的时间和帮助
-Daniel
发布于 2012-01-27 00:39:26
在我看来,您的代码根本不使用array[0]
。
在最后一个循环中,您可能希望交换i
和i-1
,而不是i+1
。
另外,AFAIK,这不是摇床也不是气泡排序:你需要做的是一个主循环,里面有两个嵌套的循环,一个从0到大小-1,另一个从大小-1到0,在循环之间测试是否必须交换,如果不是,那么数组就排序了。
在这里查看一下以获得一个干净的实现。
https://stackoverflow.com/questions/9027529
复制相似问题