插入排序 算法
算法思路
- 維護一段有序數(shù)列
- 同時遍歷待排序數(shù)列,在有序數(shù)列中找到合適的位置插入元素
基本代碼
實現(xiàn)如下:
void insertion(vector<int>& arr){for(int i=1;i<arr.size();i++){int temp=i;for(int j=i-1;j>=0;j--){//有序序列不斷得增加if(arr[temp]<arr[j]) {//待排序數(shù)列中的數(shù)小于有序數(shù)列中的數(shù),則插入swap(arr[temp],arr[j]);//每發(fā)現(xiàn)一個小于待排序的元素時則交換temp --;}}}
}
優(yōu)化:
找到當(dāng)前待插入元素的位置之后再插入,減少交換次數(shù)
void insertion1(vector<int>& arr){for(int i=1;i<arr.size();i++){int temp=arr[i];int j=i-1;for(;j>=0 && temp<arr[j];j--){//移動有序數(shù)列的元素位置arr[j+1] = arr[j];}arr[j+1] = temp;//插入元素}
}
算法分析
時間復(fù)雜度:最優(yōu)一次遍歷排序完成O(n);最差是O(n^2),逆序數(shù)組,每次插入元素都要比較已排序的元素個數(shù)次。
空間復(fù)雜度:O(1),臨時變量temp
總結(jié)
- 上一篇: 和平精英暗翼战神多少钱?
- 下一篇: 希尔排序 算法