插入排序
和选择很像,都分为有序区和无序区。选择排序是每次从无序区中找到最小元素放到有序区末尾,而插入是将数组第一个元素作为有序区,每次从无序区中拿出第一个元素插入到有序区中合适的位置,直到无序区空。初始有序区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是空的 } } }