7.2简单排序方法
7.2.1 直接插入排序
C++ Codes:
#pragma once
#include "stdafx.h"
template<class T>
void DirectInsertSort(T vec[], int length)
{
for(int i=0;i<length-1;++i)
{
for(int k=0;k<=i;++k)
{
if(vec[k]>vec[i+1])
{
int val=vec[i+1];
for(int j=i;j>=k;--j)
{
vec[j+1]=vec[j];
}
vec[k]=val;
break;
}
}
}
}
Python Codes:
def DirectInsertSort(arr):
for i in range(0,len(arr)-1):
for j in range(0,i+1):
if(arr[j]>arr[i+1]):
val=arr[i+1]
for k in range(i,j-1,-1):
arr[k+1]=arr[k]
arr[j]=val
break
最坏情况下时间复杂度是O(n的平方),最好情况下时间复杂度是O(n),一般情况下时间复杂度是O(n的平方)。
空间复杂度为O(1)。因此,直接插入排序算法是一种稳定的排序算法。