对Bubblesort程序进行2次修改

时间:2016-04-21 13:18:19

标签: java algorithm sorting

我必须对一个简单的bubblesort程序进行以下两个修改:

  1. 第一次传递后,最大数字保证在数组中编号最大的元素中;在第二次传球后,两个最高的数字是“到位”;等等。不要在每次传递中进行九次比较,而是修改冒泡排序,在第二次传球中进行八次比较,在第三次传球中进行七次比较,依此类推。

  2. 数组中的数据可能已经按照正确的顺序或接近正确的顺序排列,那么为什么如果少数就足以进行九遍?修改排序以在每次通过结束时检查是否进行了任何交换。如果没有,数据必须已经按正确的顺序排列,因此程序应该终止。如果已进行互换,则至少需要再传递一次。“

  3. 我将非常感谢任何关于如何处理这些问题的帮助!

    //sort elements of array with bubble sort
    public static void bubbleSort (int array2[])
    {
    
        //loop to control number of passes
        for (int pass = 1; pass < array2.length; pass++)
        {
    
            //loop to control number of comparisons
            for (int element = 0; element < array2.length - 1; element++)
            {
    
                //compare side-by-side elements and swap them if 
                //first element is greater than second element
                if (array2[element] > array2[element + 1]){
    
                    swap (array2, element, element + 1);
    
                }
            }
        }
    }
    //swap two elements of an array
    public static void swap (int array3[], int first, int second)
    {
        //temporary holding area for swap
        int hold;
        hold = array3[first];
        array3[first] = array3[second];
        array3[second] = hold;
    
    }
    

1 个答案:

答案 0 :(得分:0)

我认为这会对你有用。添加一个布尔值进行检查,每次运行都会从j中减去运行(input.length)。

public static int[] bubbleSort(int input[])
{
    int i, j, tmp;
    bool changed;
    for (j = 0; j < input.length; j++)
    {
        changed = false;
        for (i = 1; i < input.length - j; i++)
        {
            if (tmp[i-1] > input[i])
            {
                tmp= input[i];
                input[i] = input[i-1];
                input[i-1] = tmp;
                changed = true;
            }
        }
        if (!changed) return input;
    }
    return input;
}