插入排序
思路:把数组当成有序和无须两部分,将无须部分的元素与有序部分的元素逐个比较,并且插入到正确的位置,直到无须部分没有元素。
步骤:
1.遍历整个数组所有元素,从第二个元素开始遍历,假设第一个元素自身就是有序的。
2.有序部分后的第一个元素,为无须部分的第一个元素。遍历无须部分的元素,根据部分3插入到有序部分中去。
3.将无须部分的第一个元素与有序部分的元素逐个比较,从有序部分的尾部开始比较。如果有序部分的元素比该元素大,则将有序部分的这个元素填到后面一个位置上。当该元素比有序部分的元素大时,停止遍历,并将该元素填到该位置上。
void insertSort(vector<int>& arr){ for(int i = 0; i < arr.size();i++){ int temp = arr[i]; int j = i; for( ; j > 0 && arr[j-1] > temp; j--){ arr[j] = arr[j-1]; } arr[j] = temp; } }
分析:
因为两个循环,所以时间复杂度为O(n2),是稳定的排序算法。