直接插入排序java
排序过程如上图(图非原创)数组
该排序原理以下:缓存
将一个拥有n个元素的待排序的数据序列R数组当成两个序列(自己仍是一个序列),一个有序序列,一个无序序列。刚开始时,有序序列中只有一个元素,也就是R[0],而无序序列中则是R[1]到R[n-1]。而后每次拿出无序序列中第一个元素,此时是R[1],将其与有序序列中的最后一位数字做比较,若是无序序列中的第一个元素<有序序列中的最后一个元素,说明此时要对该数字进行排序。而排序的操做则是将无序序列中的第一个元素进行缓存到变量temp,而后与有序序列中的最后一个元素比较,若是temp比有序序列中的最后一个元素小,那么将有序序列的最后一个元素向后移动一位,而后接着拿有序序列中的前一位与temp比较,直到找到这个数值(temp)合适的位置,而后将该数值直接插入到该位置上。因此叫作直接插入排序。
code
具体代码以下:排序
public int[] sort(int[] sort) { int temp; // 监视哨,也就是缓存即将用于比较的数字 int i, j; // 从数组第2个数字开始与前一个数字比较 for (i = 1; i < sort.length; i++) { if (sort[i] < sort[i - 1]) { temp = sort[i]; // 将要进行插入的数字缓存 // 查找这个数字的适当位置 // 将缓存的数字temp与有序序列中最后一位数字依次向前进行比较, // 若是它比有序序列中的数字小,那么将有序序列中的那个数字向后移一位, // 不然该位置就是temp元素应该在的位置,那么插入该数字便可。 for (j = i ; j > 0 && sort[j-1] > temp; j--) { sort[j] = sort[j-1]; } sort[j] = temp; } } return sort; }