插入排序(Insertion Sort)的基本思想:每次将一个带排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

类似扑克牌摸牌:摸来的第一张牌无须整理,此后每次从卓上的牌(无序区)中模最上面的1张并插入手牌(有序区)中正确位置上。为了找到这个位置,须从左向右(或从右向左)将摸来的牌与手牌逐一比较。

void insertionSort(int[] A,int n){
    if(A == null || n <= 1){
        return;
    }
    int i,j,temp;

    for(i = 1;i < n; i++){
        temp = A[i];
        for(j = i;j > 0 && temp < A[j-1];j--){
            A[j] = A[j - 1];
        }
        A[j] = temp;
    }
}

算法分析:

  • 时间复杂度:正序O(n) 逆序和无序O(n2);
  • 空间复杂度:就地排序,O(1);

  • 稳定排序算法

results matching ""

    No results matching ""