Java 气泡排序到间隙排序的修改

Java 气泡排序到间隙排序的修改,java,sorting,bubble-sort,gaps-in-data,Java,Sorting,Bubble Sort,Gaps In Data,我遇到了一个问题,需要你的指导。基本上,我创建了这个冒泡排序方法。如何将其修改为间隙排序,即不是每次通过列表比较相邻元素,而是比较相隔若干(i)个位置的元素,其中(i)是小于n的整数。例如,第一个元素将与(i+1)元素进行比较,第二个元素将与(i+2)元素进行比较,第n个元素将与(n-i)元素进行比较,等等。当所有可比较的元素都进行了比较后,一次迭代就完成了。在下一次迭代中,i被减少一些大于1的数字,并且该过程继续,直到i小于1为止 public static void bubbleSort (

我遇到了一个问题,需要你的指导。基本上,我创建了这个冒泡排序方法。如何将其修改为间隙排序,即不是每次通过列表比较相邻元素,而是比较相隔若干(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;
            }
        }
    }
}
publicstaticvoidbubblesort(可比较的[]数据,int-maxlength){
int位置,扫描;
可比温度;
对于(位置=maxlength;位置>=1;位置--){
用于(扫描=0;扫描0){
//交换值
温度=数据[扫描];
数据[扫描]=数据[扫描+1];
数据[扫描+1]=温度;
}
}
}
}
此代码(在上找到)可能会帮助您:

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);
}
publicstaticvoidgapsort(可比较的[]数据,整数大小){
整数指数;
int gap,顶部;
可比温度;
布尔交换;
双SF=1.3;
差距=大小;
做{
交换=假;
差距=(整数)(差距/平方英尺);
如果(间隙==0){
差距=1;
}
对于(索引=1;索引0){
温度=数据[索引];
数据[指数]=数据[指数+差距];
数据[索引+间隙]=温度;
交换=真;
}
}
}而(交换| |间隙>1);
}

记住,对实现
Compariable
接口的对象数组进行排序的最简单方法通常是
数组。sort()

您正在寻找GapSort实现吗?查看此链接上的第二篇文章:thnx。但是你能解释一下吗?“double SF=1.3;”为什么这样有用?我们的想法是从一个大的间隙开始,并在每个循环中缩小它。SF类似于一个“收缩系数”(我在文章中假设它的意思类似于“收缩系数”),在这种情况下大约为76%(这意味着每次迭代时,间隔都会减少到其原始值的76%)。请注意,如果您的对象实现了可比性,那么对它们进行排序的最简单、最快速的方法通常是数组。sort()…酷,我明白了!非常感谢。