插入排序
对于基本有序的数组最好用,当然下面的数组并不有序
形式相似与打牌,抓一张牌,与前面的数一一对比,小于则往前排(基本有序)
第一步,先搭建框架(实现自己会写的部分,将能合并的封装成一个方法)
public static void main(String[] args)
{
int[] a = {456, 15, 64, 5, 451, 3213, 123, 13, 545, 5332, 131};
sort(a);
print(a);
}
public static void sort(int[] a)
{
}
public static void swap(int[] a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void print(int[] arr)
{
for (int i = 0; i < arr.length; i++)
{
System.out.print(arr[i] + " ");
}
}
第二步,思考sort方法该如何去写。
第一个开始直到N-1这个位置(数组下标),一直往前找
public static void sort(int[] a)
{
for (int i = 0; i < a.length; i++)
{
for (int j = i; j > 0; j--)
{
if (a[j] < a[j - 1])
{
swap(a, j, j - 1);
}
}
}
}
第三步:优化sort,可以把a[j] < a[j - 1]直接放到for循环里,用&&连接可以省去if循环。(优化不大,语句变短)
空间复杂度O(1)
时间复杂度O(n^2)最好情况(不须排序)O(n)
比冒泡排序来的效率高,比选择排序也快一些。
排序方法对比:
1.冒泡排序,太慢比较交换太多
2.选择:不稳定
3.插入:样本教小,基本有序,效率高