在学习算法的过程中,我们难免会接触很多和排序相关的算法。总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的。
从今天开始,我们将要进行基本的排序算法的讲解。Are you ready?Let‘s go~~~
直接插入排序概念讲解:
直接插入排序的做法是:每次从无序表中取出第一个元素,插入到有序表的合适位置,使有序表仍然有序
第一趟比较前2个数然后把第二个数按大小插入到有序表中,第二趟把第三个数与前2个数从前向后扫描,把第三个数按大小插入到有序表中,依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
直接插入排序是由两层嵌套循环组成的,外层循环标识并决定待比较的数值,内层循环为待比较数值确定其最终位置,直接插入排序是将待比较的数,与它前一个数值进行比较,所以外层循环是从第二个数值开始的,当前一个数值比较大的情况下循环继续比较,直到找到比待比较数值小的,并将待比较数值置入其 后一位置,结束该次循环。
排序方法
1.简单方法
首先在当前有序区R[1..i-1]中查找R[i]的正确插入位置k(1≤k≤i-1);然后将R[k..i-1]中的记录均后移一个位置,腾出k位置上的空间插入R[i]。
注意:若R[i]的关键字大于等于R[1..i-1]中所有记录的关键字,则R[i]就是插入原位置。
直接插入排序的Java代码实现
package com.yonyou.test; /** * 内部排序算法之直接插入排序 * 默认按照从小到大进行排序操作 */ public class Test{ public static void main(String[] args) { //需要进行排序的数组 int[] array=new int[]{8,3,2,1,7,4,6,5}; //输出原数组的内容 printResult(array); //直接插入排序操作 directInsertSort(array); //输出排序后的相关结果 printResult(array); } /** * 直接插入排序的方法 * @param array */ private static void directInsertSort(int[] array) { for(int i=0;i<array.length;i++) { for(int j=0;j<i;j++) { if(array[i]<array[j]) { int temp=array[i]; System.arraycopy(array,j,array,j+1,i-j); array[j]=temp; } } } } /** * * 输出相应数组的结果 * @param array */ private static void printResult(int[] array) { for(int value:array) System.out.print(" "+value+" "); System.out.println(); } /** * 交换数组中两个变量的值 * @param array * @param i * @param j */ private static void swap(int[] array,int i,int j){ int temp=array[i]; array[i]=array[j]; array[j]=temp; } }