一直觉得排序是一个很高深的东西,也一直是自己的一个劣势,前两天无意间发现了一篇blog 写关于java的最基本的几个排序算法,自己就看了看,觉得理解的差不多了。留点笔记记录一下。
我理解的插入排序:插入排序就是往已排好的顺序里面插入到相应的位置,其实换个思路挺好理解的,大学军训的时候,教官已经把你们按照按照身高排好队了,从做到右依次增高,也就是左边同学的个子矮的,右边的同学个子高些。这个时候一个同学迟到了,总不能因为迟到了就不让参加军训吧,可是还得按照身高排序,怎么办呢?那就让从尾开始一个一个比谁高呗,比他高的往右挪一个位置,再和第二个进行比较,还高,那就往右挪,这样一个一个比,总会找到一个比他矮的,如果一个都没有找到,那么排头的位置就是他的。
插入思想差不多就是这样的。没有排好的队伍,也有排头的,他先是一个临时的排头,第二个和他比较,他个高,往右站,第二个当排头,这样前两个就排好了,第三个再开始继续和前两个比较,这样每来一个,最多一个循环,就能排好队伍了。
具体代码如下
public int[] sortInsert(int[] array) { int length = array.length; for (int i = 1; i < length; i++) {//从第二个开始,因为第一个已经排好队了 int temp = array[i];//保存这个位置对应的数字temp int j = i - 1;//与这个坐标前面的进行比较 //循环开始之前,i之前的数字是已经是按照从小到大的顺序排好的 //循环的目的是为了找到一个位置,这个位置之前的数都小于temp ,这个位置之后的数都大于temp for (; j >= 0 && array[j] > temp; j--) {//如果他之前的值比temp 大,那么就让这个值放到他之后的位置上, array[j + 1] = array[j]; } //循环结束后,就能得到 位置之前的数都比temp 小,temp 就在这个位置上 array[j + 1] = temp; } return array; }