算法复习-插入排序

现有一个数列{3,1,5,2,2},要求用插入排序进行排序:

一.插入排序(最好复杂度为O(n),最差复杂度为O(n^2))

    算法流程:

    1.从第一个数3开始,不用排序。

    2.插入第二个数1,比较3和1,3>1?,大于则交换顺序,小于或者等于则不交换,数列变为{1,3}。

    3.现插入第三个数5,3<5,不交换顺序,数列变为{1,3,5}。

    4.插入第四个数2,5>2,交换顺序,数列变为{1,3,2,5},继续比较3和2,3>2,交换顺序,继续比较1和2,1<2,不交换,数列变为{1,2,3,5}。

    5.插入第五个数2,5>2,交换顺序,数列变为{1,2,3,2,5},继续比较3和2,3>2,交换顺序,数列变为{1,2,2,3,5},继续比较2和2,2=2,不交换,数列变为{1,2,3,5}。

     简单来说插入排序包括两个循环,外层循环插入新的待排数,内层循环从数组尾部开始和待排数进行比较,一旦不满足条件e.g list[j-1]>list[j],则此内层循环不继续执行,进入下一个外层循环。代码如下:

    

/***author spike wang ***
 * 2018-6-25
 */

public static int[] sort(int[] array)
{

    if (array==null&&array.length==2)            //如果数组为空或者个数为2,则不需要排序
    {
        return array;
    }
    for (int i=1;i<array.length-1;i++)
        for (int j=i+1;j>0;j--)
        {
            if (array[j-1]>array[j])
                swap(array,j-1,j);
        }
        return array;
}
public static void swap(int[] array,int l,int r)        //swap函数实现位置互换
{
    int temp=array[l];
    array[l]=array[r];
    array[r]=temp;
}

猜你喜欢

转载自blog.csdn.net/qq_34814105/article/details/80807220