Java数据结构与算法——插入排序(思路)(代码实现)(时间测验)

插入排序

插入排序法介绍**:**
插入式排序属于内部排序法,是对于欲排字的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。

插入排序法思想**:**
n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素, 把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
下面先思路代码实现:

package sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class InsertSort {
    public static void main(String[] args){
        int[] arr = {101,34,119,1,-1,88};
        insertSort(arr);
    }
    //插入排序方法
    public static void insertSort(int[] arr) {
//第一次插入排序
        System.out.println("第一次插入排序:");
        int insertVal = arr[1];
        int inserIndex = 1-1;
        while(inserIndex >= 0 && insertVal < arr[inserIndex]){
            arr[inserIndex+1] = arr[inserIndex];
            inserIndex--;
        }
        arr[inserIndex + 1] = insertVal;
        System.out.println(Arrays.toString(arr));
        //第二次插入排序
        System.out.println("第二次插入排序:");
        insertVal = arr[2];
        inserIndex = 2-1;
        while(inserIndex >= 0 && insertVal < arr[inserIndex]){
            arr[inserIndex+1] = arr[inserIndex];
            inserIndex--;
        }
        arr[inserIndex + 1] = insertVal;
        System.out.println(Arrays.toString(arr));
        //第三次插入排序
        System.out.println("第三次插入排序:");
        insertVal = arr[3];
        inserIndex = 3-1;
        while(inserIndex >= 0 && insertVal < arr[inserIndex]){
            arr[inserIndex+1] = arr[inserIndex];
            inserIndex--;
        }
        arr[inserIndex + 1] = insertVal;
        System.out.println(Arrays.toString(arr));
    }
}

下面是正规代码:

package sort;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class InsertSort {
    public static void main(String[] args){
        int[] arr = {101,34,119,1,-1,88};
        insertSort(arr);
        System.out.println("排序结果:"+Arrays.toString(arr));
       /*这里是80000个随机数得算法效率测试。
        int []arr1 = new int[80000];
        for (int i=0; i < 80000;i++){
            arr1[i] = (int)(Math.random()* 8000000);
        }
        Date date1 = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date1str = simpleDateFormat.format(date1);
        System.out.println("排序前的时间="+date1str);
        insertSort(arr1);
        Date date2 = new Date();
        String date2str = simpleDateFormat.format(date2);
        System.out.println("排序后的时间="+date2str);*/
    }
//插入方法
public static void insertSort(int[] arr) {
        int insertVal = 0;//用来记录待插入数值
        int inserIndex = 0;//用来记录有序数列得最后下标值
        for (int i =1;i < arr.length; i ++ ){
            insertVal = arr[i];
            inserIndex = i-1;
            while(inserIndex >= 0 && insertVal < arr[inserIndex]){
                arr[inserIndex+1] = arr[inserIndex];
                inserIndex--;
            }
            if (inserIndex + 1 !=i){
            //这里是一个优化,当待插入得这个数,位置不动时,不进行这一步。
                arr[inserIndex + 1] = insertVal;
            }
            
            /*这里可以显示每一次插入排序后得结果,不理解得可以取消注释,帮助理解。
            System.out.println("第"+i+"轮插入后结果:");
            System.out.println(Arrays.toString(arr));*/
        }
    }
}



你可能感兴趣的:(Java数据结构与算法——插入排序(思路)(代码实现)(时间测验))