插入算法思想就是每步将一个待排序的纪录,按其关键码值(key)的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
具体的例子就是小学老师让你 按自己的身高 排队,要高于前面低于后面。
Best cast And worst case
最好情况就是输入 已经排序好了,
而最差情况就是逆排序
平均时间复杂度为O(n^2)
x下面是两种实现方式 思想都是一样的。
static void InserSort(int[] array)
{
//从第一个元素开始到数组结束, 留出一个位置给最后一个元素插入。
for (int i = 1; i < array.Length; i++)
{
int iValue = array[i];
bool isInsert=false;
for (int j = i-1; j>=0; j--)
{//如果找到 一个比ivalue大的值, 让前面的玩后移动。》》
if (array[j]>iValue)
{
array[j + 1] = array[j];
}
else
{ //没有比i大
array[j + 1] = iValue;
isInsert = true;
break;
}
}
if (!isInsert)
{
array[0]=iValue;
}
}
}
public static void insertSort(int[] array)
{
int i=1;
while (i<array.Length)
{
int j = i - 1;
int tem = array[i];
while (j>=0&&array[j]>tem)
{
array[j + 1] = array[j];
j--;
}
array[j + 1] = tem;
i++;
}
}