我们在前面两篇文章中介绍了两种排序方式,归并排序和快速排序,但是我们可以知道的是这两种排序针对的都是数据比较复杂的情况下我们使用分而治之的思想和递归的解决方式,那么入过我们的数据量比较小的情况下也是用牛刀杀鸡么?答案是否定的,这里将会介绍一种比较简单的排序方式,插入排序。其实我们在看到这个名字的时候可以顾名思义,什么叫做插入,那就是平时我们遇到过的比如说有一队人进行排队,我们按照身高排队,已经排好的情况下,这时候来了一个新同学,我们会重新打乱排么?那显然不现实,明显是我们拿着这个人和队列中的人进行比较,如果找到了比这个人高的那么我们就可以把他放在前边。话不多说直接上示意图。
从图中我们看出它的排序思想就是我们默认第一个数据已经是有序的情况下,我们选取第二个数据和第一个数据进行比较,进行排序,然后在选取第三个数据和前面两个数据金子那个比较,如此循环直到最后一个数据比较完成为止,那么我们获取到的数组就是一个有序的数组。代码如下:
public static void insertSort(int arr[]){ //外层循环控制需要进行排序的数据 for(int i = 1,i < arr.length;i++){ //保存选取出来的比较数据 int tem = arr[i]; //里层循环控制需要进行比较的数据
int j; for(j = i - 1,j >= 0,j--){ if(arr[i] < arr[j]){ arr[j + 1] = arr[j]; }else{
break; } }
arr[j + 1] = tem;
}
}
在阅读完以上代码我们会发现其实插入排序注重的就是找到自己位置,按照位置排排坐就行,并没有太多的复杂思考。但是我们可以通过代码分析到确实插入排序的效率不会太高,在对于数据量巨大的情况下。因为我们使用了两次循环,这样对于时间的消耗会是巨大的。