摇床排序或双向冒泡排序

发布于 2024-12-29 06:12:26 字数 1293 浏览 0 评论 0原文

我目前正在学习数据结构和算法课程,练习的一部分是使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不及他 2025-01-05 06:12:27

在我看来,您的代码根本不使用 array[0]

在最后一个循环中,您可能需要交换 ii-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 and i-1, not i+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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文