七大排序-直接插入排序
直接插入排序遍历
算法复杂度
代码
/**
* 排序思想:
* 1.建立哨兵,把药插入的数据赋值给他
* 2.将要插入的数据从前面已经排好的数组后面开始比较,如果大于前面就要记录下来,并将数据进行后移,直到插入数据小于比较的数据
* 3.将哨兵的值赋给当前的记录下标
* 4.运用循环重复上述的步骤直到遍历结束
* 时间复杂度:O(n^2)
* 空间复杂度:O(1)
*/
public static void sort(int[] arr)
{
int len = arr.Length;
//设置哨兵
int tmp = 0;
//i=1:因为第一个数肯定是有序的,所以从第二个数开始遍历
for (int i = 1; i < len; i++)
{
//哨兵记录i位置的值,为后面的插入做准备
tmp = arr[i];
//i-1:因为是与前面已经排序好的数组进行比较,所以哨兵的值与i-1的位置比较,若arr[i-1]>tmp,i-1后移
int j = i - 1;
while (j >= 0 && arr[j] > tmp)
{
arr[j + 1] = arr[j];
j--;
}
//将哨兵插入最终的合适位置
arr[j + 1] = tmp;
}
}
}