插入排序

和选择很像,都分为有序区和无序区。选择排序是每次从无序区中找到最小元素放到有序区末尾,而插入是将数组第一个元素作为有序区,每次从无序区中拿出第一个元素插入到有序区中合适的位置,直到无序区空。初始有序区0,无序区[1,n-1]

分析

最好:T(n)=o(n),数组元素正序排列 
最坏:T(n)=o(n^2)数组元素反序排列 
平均:T(n)=o(n^2)

代码

先用个临时变量存储无序区第一个元素,然后比较排序。

class Solution{
public://起初有序区[0],无序区[1,n-1]
    void sort(int arr[],int len){
        for(int i=1;i<len;i++){
            int tmp = arr[i];
            int j = i-1;//代表有序区最有一个元素位置
            while(j>=0 && arr[j]>tmp){
                arr[j+1] = arr[j];
                j--;
            }
            arr[j+1] = tmp;//j+1是空的
        }
    }
}
原文地址:https://www.cnblogs.com/pacino12134/p/11323048.html