排序算法之直接插入排序

    xiaoxiao2021-03-25  49

    一、介绍

    直接插入排序是最简单的一种排序,最坏情况下时间复杂度为O(n2),最好情况下时间复杂度为O(n),平均为O(n2).

    二、算法思想

    当要对序列中一个元素(设元素下标为j)进行排序时,遍历这个元素前面的所有元素,找到该元素的目的位置,即如果要求序列从小到大排序的话,则遍历在该元素前面的所有元素,找出第一个大于该元素的元素,设为array[k],则对区间[k,j)中的元素依次向后移动一个位置,将array[j] 放入array[k]中。

    三、算法实现(C++)

    #include "stdafx.h" #include <iostream> #include <vector> using namespace std; void InsertSort(vector<int>& vec) { int i, j; //从第一个元素开始插入 for (i = 0; i < vec.size(); i++) { //遍历[0,i)区间内所以元素,寻找vec[i]应该存放的位置 for (j = 0; j < i; j++) { if (vec[i] < vec[j]) break; } if (j < i) { //在区间[0,i)中找到vec[i]应该存放的位置为j //将区间[j,i)之间的元素依次后移一个位置,空出j位置给vec[i] int tmp = vec[i]; for (int k = i - 1; k >= j; k--) { vec[k + 1] = vec[k]; } vec[j] = tmp; } } } int _tmain(int argc, _TCHAR* argv[]) { vector<int> vec; vec.push_back(9); vec.push_back(1); vec.push_back(2); vec.push_back(5); vec.push_back(7); vec.push_back(4); vec.push_back(7); vec.push_back(6); vec.push_back(3); vec.push_back(5); InsertSort(vec); for (size_t i = 0; i < vec.size(); i++) { cout << vec[i] << " "; } cout << endl; system("pause"); return 0; } 运行结果为:

    转载请注明原文地址: https://ju.6miu.com/read-33923.html

    最新回复(0)