Java数据结构与算法排序之----------------插入排序

    在大多数情况下,插入排序算法是基本的排序算法中最好的一种。虽然插入排序算法仍然需要O(N^2)的时间,但是在一般情况下,它要比冒泡排序快一倍,比选择排序还要快一点。尽管它比冒泡排序和选择排序算法都更麻烦一些,但它也并不很复杂。它经常被用在比较复杂的排序算法的最后阶段,列入快速排序。

    用插入排序为棒球队员排序

    开始插入排序之前,把棒球队员按随机顺序排成一行。(他们可能急着想打球,但是现在显然没有时间让他们去打)。从排序过程的中间开始,可以更好地理解插入排序,这是队列已经排好了一半。

    局部有序

    此时,在队伍的中间有一个作为标记的队员。(可以把一件红色运动衫扔到这个队员面前。)在这个作为标记的队员左边的所有队员已经是局部有序的了。这意味着这一部分人之间是按顺序排列的;每个人比他/她左边的人都高。然而这些队员在队列中最终的位置还没有确定,因为当没有被排过序的队员要插入到他们中间的时候,他们的位置还要发生变动。

    注意,局部有序在冒泡排序和选择排序中是不会出现的。在这两个算法中,一组数据项在某个时刻是完全有序的;在插入排序中,一组数据仅仅是局部有序的。

    被标记的队员

    作为标记的队员,称为“被标记”的队员,他和他右边所有的队员都是未排过序的。如图:

Java数据结构与算法排序之----------------插入排序_第1张图片

InsertSort.java

 
 
package simpleSort;

/**
 * 插入排序
 * @author huyi
 */
public class InsertSort extends Sort{

    public InsertSort(int size){
        this.arr = new int[size];
    }

    public InsertSort(int[] arr){
        this.arr = arr;
        this.size = arr.length;
    }

    @Override
    public void sort() {
        int temp;
        int in,out;
           for (out=1; out 0 && arr[in-1]>temp){
                   arr[in] = arr[in-1];
                   in--;
               }
               arr[in] = temp;
           }
    }
}

 

 

程序入口:

 
import simpleSort.InsertSort;

public class Main {

    public static void main(String[] args) {
        int[] arr= {5,4,2,3,1};

        InsertSort insertSort = new InsertSort(arr);
        insertSort.display();
        insertSort.sort();
        insertSort.display();
    }
}
 

运行结果:

Java数据结构与算法排序之----------------插入排序_第2张图片

你可能感兴趣的:(算法)