前一段时间看到了一片文章《为什么我们要像驯化小狗狗一样驯化算法》,就一直在想我是否需要重头开始做一遍Java的基本算法排序,无论自己现在水平几何,都要回顾这些经典的,值得回味的程序片段。
那么接下来我们就一睹为快了,看看你是否已经忘记了她,还是她依然活在你深深的脑海里。
package com.honzh.mwq.sort; /** * 插入排序(原则就是当前位置的数和前面位置的数进行比较,如果当前位置的数小于之前的数,则交换位置). * * @author qinge * */ public class Inserting { public static void main(String[] args) { // 数组元 int[] orgins = { 2, 1, 5, 4, 9, 8, 6, 7, 10, 3, 3 }; // 排序前的数 for (int num : orgins) { System.out.print(num + "、"); } System.out.println(); // 从第二个位置开始,因为第一个位置和他前面的位置(0个位置)相比,肯定为最小 for (int index = 1; index < orgins.length; index++) { // 复杂度为数组元的长度,或者说n // 当前数 int curValue = orgins[index]; // 前一位的下标 int preIndex = index - 1; // 当前数和前一位数相比,如果小,则交换位置,当前数继续和前一位数的前一位相比 while (preIndex >= 0 && curValue < orgins[preIndex]) {// 复杂度为1+2+3+...+(n-1) // 前一位数的下一位等于前一位的数 orgins[preIndex + 1] = orgins[preIndex]; // 前一位的数等于当前数 orgins[preIndex] = curValue; // 继续(前一位的前一位) preIndex = preIndex - 1; } } // 排序后的数 for (int num : orgins) { System.out.print(num + "、"); } } }