插入排序:
从第一个元素开始,将每个待排序的数据插入到前面已经排好序的有序序列中,直到所有元素插完为止。
步骤:(以升序为例)
1.从第二个元素开始,(可以认为第一个元素是有序的)
2.读取第一个待排序元素element,
3依次与前面的有序序列比较(此处为从后往前比较)如果element小于前一个元素,则交换位置,
4.重复3直到找到小于等于element的元素,
5.重复2~4直到排序完成`
思路:
假设前面n个元素已经有序,将第n+1个元素插入到前面的有序序列中,让前n+1个元素有序。按此思路对所有元素排序直到整个序列有序
一般都是从第一个开始插入,因为不确定前面的数据都是有序的
代码如下:
public class InsertSort {
public void insertSort(int[] array){
//记录要插入的元素下标
int k;
int len = array.length;
//可以认为第一个已经排序直接从第二个元素开始
for (int i = 1; i < len; i++) {
k = i;
//从已排序的元素中依次往前比较
for (int j = i-1; j > 0; j--) {
//如果比插入的元素大则向后移移
if (array[k]<array[j]){
int temp = array[k];
array[k] = array[j];
array[j] = temp;
k --;
}else {
//否则跳出循环
break;
}
}
}
}
//测试方法
public static void main(String[] args) {
int[] arr ={9,65,32,56,8,12,45,26,58,78,24,32};
InsertSort i = new InsertSort();
i.insertSort(arr);
for (int a:arr) {
System.out.print(a+" ");
}
}
}