【基础排序】插入排序
选择排序是每次选择出最小的放到已经排好的数组后面,而插入排序是依次选择一个元素,插入到前面已经排好序的数组中间,确保它处于正确的位置,当然,这是需要已经排好的顺序数组不断移动。步骤描述如下:
1.从第一个元素开始,假设认为第一个元素已经排好顺序。
2. 取出后面一个元素 n,在前面已经排好顺序的数组里从尾部往头部遍历,假设正在遍历的元素为 nums[i],如果 num[i] > n,那么将 nums[i] 移动到后面一个位置,直到找到已经排序的元素小于或者等于新元素的位置,将 n 放到新腾空出来的位置上。如果没有找到,那么 nums[i] 就是最小的元素,放在第一个位置。
3. 重复上面的步骤 2,直到所有元素都插入到正确的位置。
package sort; public class InsertionSort { public static void printf(int[] nums) { for (int num : nums) { System.out.print(num + " "); } System.out.println(""); } public static void insertionSort(int[] nums) { if(nums == null) { return; } int size = nums.length; int index, temp; for(int i = 1;i < size;i++) { // 当前选择插入的元素前面一个索引值 index = i - 1; // 当前需要插入的元素 temp = nums[i]; while(index >= 0 && nums[index] > temp) { // 前面数据比后边的要大. nums[index + 1] = nums[index]; index--; } // 插入空出来的位置 nums[index + 1] = temp; //System.out.print("第" + (i) + "轮插入结果:"); printf(nums); } } public static void main(String[] args) { // TODO Auto-generated method stub int[]nums = new int[]{98,90,34,56,21}; printf(nums); insertionSort(nums); } }
引用链接:https://www.cnblogs.com/yyyyfly1/p/15773593.html