如何用Java编写直接插入排序算法?
- 内容介绍
- 文章标签
- 相关推荐
本文共计705个文字,预计阅读时间需要3分钟。
将排序插入方法模块化,提供详细说明:
直接插入排序:- 原理:选择一个数作为有序序列的基准,将其余元素依次插入到已排序序列中适当位置。- 步骤: 1. 选择第一个数作为基准,假设为有序序列。 2. 从第二个数开始,依次与基准比较。 3. 如果当前数小于基准,将其插入到基准之前的有序序列中。 4. 重复步骤2和3,直到所有数都插入完成。
插入过程:- 将要插入的数与有序序列中的数进行比较。- 如果当前数小于有序序列中的数,将其插入到当前位置。- 否则,继续比较下一位置,直到找到插入位置。
一个方法插入排序的方法块,有详细的说明/**直接插入排序:首先选定一个数作为有序序列,然后把其它无序数一个一个数插入到这个有序序列中。 *插入过程:将要插入的这个数从有序序列的最后一个数开始比较,若小于,则被比较的这个数后移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; }
本文共计705个文字,预计阅读时间需要3分钟。
将排序插入方法模块化,提供详细说明:
直接插入排序:- 原理:选择一个数作为有序序列的基准,将其余元素依次插入到已排序序列中适当位置。- 步骤: 1. 选择第一个数作为基准,假设为有序序列。 2. 从第二个数开始,依次与基准比较。 3. 如果当前数小于基准,将其插入到基准之前的有序序列中。 4. 重复步骤2和3,直到所有数都插入完成。
插入过程:- 将要插入的数与有序序列中的数进行比较。- 如果当前数小于有序序列中的数,将其插入到当前位置。- 否则,继续比较下一位置,直到找到插入位置。
一个方法插入排序的方法块,有详细的说明/**直接插入排序:首先选定一个数作为有序序列,然后把其它无序数一个一个数插入到这个有序序列中。 *插入过程:将要插入的这个数从有序序列的最后一个数开始比较,若小于,则被比较的这个数后移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; }

