一个方法插入排序的方法块,有详细的说明 /**直接插入排序:首先选定一个数作为有序序列,然后把其它无序数一个一个数插入到这个有序序列中。*插入过程:将要插入的这个数从有
/**直接插入排序:首先选定一个数作为有序序列,然后把其它无序数一个一个数插入到这个有序序列中。 *插入过程:将要插入的这个数从有序序列的最后一个数开始比较,若小于,则被比较的这个数后移1;再和倒数第二个比较....直至插入后为有序序列 *@param base int[]类型,待排序数组 *@return base 返回排好序的数组 */ public int[] directInsertSort(int[] order){ //首先判断如果数组长度小于等于1,则不用进行排序,直接返回 if(order.length <= 1){ return order; } /* 首先默认数组第一个数是有序的,即下标为0 算法说明,首先第一个for代表待插入数据,即无序数据,初始i为1,即数组下标为1的元素开始进行插入。 第二个for代表当前的有序数据,初始j的值即是当前有序数组的最大的下标(因为需要从后往前插)。 过程:首先insertIndexOf动态的记录待插入数的当前位置,初始值是i的值,然后依次与有序数组从后往前比, 若比有序数组下标为j的数小,则和它交换位置,并且把下标j赋给insertIndexOf。这样就相当于有序数 组下标为j的数向后移了一位,然后它插入。 以此循环,直到遇到比它小的,那么它的位置就不用动了 ,然后直接进入下一个数进行插入。 */ int temp = 0; //作为临时变量 for(int i = 1;i < order.length;i++){ int insertIndexOf = i; //初始化待插入数的当前位置 for(int j = i - 1;j >= 0;j--){ if(order[insertIndexOf] < order[j]){ temp = order[insertIndexOf]; order[insertIndexOf] = order[j]; order[j] = temp; insertIndexOf = j; }else{ break; //如果待插入数比它前一位数大则不用继续下一轮比较,跳出本层循环,进行下一个数插入 } } } return order; }