摇床排序或双向冒泡排序
我目前正在学习数据结构和算法课程,练习的一部分是使用 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
感谢您的时间和帮助
- 丹尼尔
I am currently taking a Data Structure and Algorithm course, and part of an exercise is to implement the shaker sort algorithm with 3 for loops. In the code snippet contained a few error, which I fixed, but there is one thing I am not sure why I getting this:
When I initialize an array of the size 12, my first index value is not sorted, I don't understand why. Here is my code:
// 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);
}
}
}
My outcome was this:
- Element 0: 53
- Element 1: 27
- Element 2: 28
- Element 3: 53
- Element 4: 90
- Element 5: 72
- Element 6: 80
- Element 7: 67
- Element 8: 2
- Element 9: 33
- Element 10: 45
- Element 11: 91
- After sorting...
- Element 0: 27
- Element 1: 2
- Element 2: 28
- Element 3: 33
- Element 4: 45
- Element 5: 53
- Element 6: 53
- Element 7: 67
- Element 8: 72
- Element 9: 80
- Element 10: 90
- Element 11: 91
Thanks for your time and help
-Daniel
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在我看来,您的代码根本不使用
array[0]
。在最后一个循环中,您可能需要交换
i
和i-1
,而不是i+1
。另外,据我所知,这不是摇床也不是冒泡排序:
你需要做的是一个主循环,里面有2个嵌套循环,一个从0到size-1,另一个从size-1到0,在循环之间,测试是否必须交换,如果不需要,那么你的数组已排序。
看看这里的干净实现
It seems to me that your code doesn't use
array[0]
at all.In your last loop, you may want to swap
i
andi-1
, noti+1
.Also, AFAIK, this is not shaker nor bubble sort:
What you need to do is a main loop with 2 nested loops inside, one that goes from 0 to size-1 and the other from size-1 to 0, and between loops, test if you had to swap, if not, then your array is sorted.
Take a look here for a clean implementation