以下は私の挿入ソートコードです:
void InsertionSort(vector<int> & ioList)
{
int n = ioList.size();
for (int i = 1 ; i < n ; ++i)
{
for (int j = 0 ; j <= i ; ++j)
{
//Shift elements if needed(insert at correct loc)
if (ioList[j] > ioList[i])
{
int temp = ioList[j];
ioList[j] = ioList[i];
ioList[i] = temp;
}
}
}
}
アルゴリズムの平均的な複雑さは O(n^2) です。
ビッグ O 表記についての私の理解から、これは、この場合、2 つのループを実行するためです (外側のループは n-1 回、内側のループは 1,2,...n-1 = n(n-1)/2 回、したがって結果として得られるアルゴリズムの無症候性の複雑さは O(n^2) です。
これで、入力配列が既にソートされている場合が最良のケースであると読みました。そして、そのような場合、アルゴリズムの大きな O の複雑さは O(n) です。しかし、どちらの場合 (平均的な場合と最良の場合) でも、ループを同じ回数実行し、要素を比較する必要があるため、これがどのように可能であるかを理解できません。回避される唯一のことは、要素のシフトです。
複雑さの計算には、このスワッピング操作のコンポーネントも含まれますか?