- 算法
- 把数组的前两个元素当作一个独立的数组,取最后一个元素(也就是独立数组最后一个元素),然后把前边的元素看作已经是排好序的
- 把数组的前三个元素看作是一个独立的数组,取最后一个元素(也就是独立数组的最后一个元素),然后把前边的元素看作是已经排好序的了
- 一次类推,接下来是第四个,第五个。。。。。。
- 可以看出来这就是个递归,递归结束的标识是独立数组的最后一个一个元素的下标等于要排序的数组的长度( 这时候再处理就会溢出了的)
- 代码
package direct_insertion_sort; import java.util.Arrays; public class DirectInsertionSortTest { private static int[] testArr = {9,8,7,16,6,5,4,3,2,1}; public static void main(String[] args) { directInsertionsSort(testArr, 1); System.out.println(Arrays.toString(testArr)); } private static void directInsertionsSort(int []array, int currentIndex){ // 递归结束的条件:如果已经到达了数组的终点,就结束,这里也有讲究,应该是currentIndex == array.length而不是currentIndex == array.length-1 // 因为currentIndex == array.length-1的时候实际上是在处理最后一个元素,如果这时候结束递归的话最后一个元素就不会被处理到了 if(currentIndex == array.length){ return; } // 得到当前要进行操作的数组元素 int currentValue = array[currentIndex]; // 挨个遍历当前数组元素的每一个元素,如果发现要操作的元素比遍历到的元素小的话, // 就退出循环 for(int i=0; i<currentIndex; i++){ if(currentValue < array[i]){ // 从这里开始是把当前遍历到的元素开始到要操作的元素的位置前一个元素位置, // 挨个往后移动一位,这样子操作的元素的位置前一个元素会到操作的元素的位置 // 操作的元素会放在腾出来的便利到的元素的位置 // 具体的做法是: // 1、这个循环的意思是从要操作的数的下标为开始,到遍历到比要操作的数小的下标位置,挨个往后挪array[currentIndex]被覆盖 // 没有关系,因为他就是要操作的元素,已经被保存起来的了。 for(int j = currentIndex; j > i; j--){ array[j] = array[j-1]; } // 2、将操作的数放到遍历到的元素的位置。 array[i] = currentValue; break; } } // 3、递归调用,实现对数组第二个元素起的每一个元素都进行操作 directInsertionsSort(array, ++currentIndex); } }
算法 直接插入排序
最新推荐文章于 2022-10-23 07:00:00 发布