首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >振动筛排序或双向气泡排序

振动筛排序或双向气泡排序
EN

Stack Overflow用户
提问于 2012-01-27 00:30:42
回答 1查看 3.3K关注 0票数 1

我目前正在学习数据结构和算法课程,一部分练习是用3 for循环实现shaker排序算法。在代码片段中包含了一些错误,这是我修复的,但是有一件事我不知道为什么要这样做:当我初始化一个大小为12的数组时,我的第一个索引值没有排序,我不明白为什么。这里是我的代码:

代码语言:javascript
运行
复制
// 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

谢谢你的时间和帮助

-Daniel

EN

回答 1

Stack Overflow用户

发布于 2012-01-27 00:39:26

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

在最后一个循环中,您可能希望交换ii-1,而不是i+1

另外,AFAIK,这不是摇床也不是气泡排序:你需要做的是一个主循环,里面有两个嵌套的循环,一个从0到大小-1,另一个从大小-1到0,在循环之间测试是否必须交换,如果不是,那么数组就排序了。

在这里查看一下以获得一个干净的实现。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9027529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档