java八种排序算法---直接插入排序

在学习算法的过程中,我们难免会接触很多和排序相关的算法。总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的。

从今天开始,我们将要进行基本的排序算法的讲解。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;
    }
}

  

从今天开始,我们将要进行基本的排序算法的讲解。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;
    }
}

  

从今天开始,我们将要进行基本的排序算法的讲解。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;
    }
}

  

猜你喜欢

转载自www.cnblogs.com/yb90/p/10017065.html