【问题标题】:Bubble Sort to gap sort modification冒泡排序到间隙排序的修改
【发布时间】:2012-04-03 06:49:59
【问题描述】:

我遇到了问题,需要您的指导。基本上我设法创建了这个冒泡排序方法。我如何将其修改为间隙排序,而不是每次通过列表比较相邻元素,而是比较相隔一些数字(i)位置的元素,其中(i)是小于 n 的整数。例如,将第一个元素与 (i + 1) 元素进行比较,将第二个元素与 (i + 2) 元素进行比较,将第 n 个元素与 (n-i) 元素进行比较,等等。当所有元素都完成时,一次迭代完成可以比较的,可以比较的。在下一次迭代中,将 i 减少某个大于 1 的数,并且该过程继续进行,直到 i 小于 1

public static void bubbleSort (Comparable[] data, int maxlength){
    int position, scan;
    Comparable temp;

    for (position = maxlength; position >= 1; position--){
        for (scan = 0; scan <= position – 1; scan++){
            if (data[scan].compareTo(data[scan+1]) > 0){
                // Swap the values
                temp = data[scan];
                data[scan] = data[scan + 1];
                data[scan + 1] = temp;
            }
        }
    }
}

【问题讨论】:

  • 您在寻找 GapSort 实现吗?查看此链接上的第二个帖子:daniweb.com/software-development/java/threads/238791/gap-sort
  • 谢谢。但你能解释一下吗? “双 SF = 1.3;”为什么有用?
  • 这个想法是从一个很大的间隙开始,然后在每个循环中缩小它。 SF 有点像“收缩系数”(我假设在帖子中的意思是“收缩因子”),在这种情况下约为 76%(这意味着在每次迭代中,差距都会减少到原来的 76%值)。
  • 请注意,如果您的对象实现了 Comparable,那么对它们进行排序的最简单和最快的方法通常是 Arrays.sort()...
  • 酷我明白了!谢谢

标签: java sorting bubble-sort gaps-in-data


【解决方案1】:

此代码(在 http://www.daniweb.com/software-development/java/threads/238791/gap-sort 上找到)可能会对您有所帮助:

public static void gapSort (Comparable [] data, int size) {  
    int index;
    int gap, top;
    Comparable temp;
    boolean exchanged;

    double SF = 1.3;
    gap = size;

    do {
        exchanged = false;
        gap = (int) (gap / SF);
        if (gap == 0){
            gap = 1;
        }
        for (index = 1; index <= size - gap; index++) {
            if (data [index].compareTo(data [index + gap]) > 0) {
                temp = data [index];
                data [index] = data [index + gap];
                data [index + gap] = temp;
                exchanged = true;
            }
        }
    } while (exchanged || gap > 1);
}

请记住,对实现Comparable 接口的对象数组进行排序的最简单方法通常是Arrays.Sort()

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多