java练习3

随机生成20个数字(随机种子)

分别使用冒泡排序、二叉树排序、插入排序进行排序

并输出最终结果以及三种排序使用的时间

package a01_第一次练习.a03_排序;

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        int[] arr = new int[20];
        for (int i = 0; i < 20; i++) {
            arr[i] = (int) Math.ceil(Math.random()*100);
        }

        int[] arr1 = new int[20];
        System.arraycopy(arr, 0, arr1, 0, 20);
        int[] arr2 = new int[20];
        System.arraycopy(arr, 0, arr2, 0, 20);
        int[] arr3 = new int[20];
        System.arraycopy(arr, 0, arr3, 0, 20);

        //冒泡排序
        LocalDateTime now1 = LocalDateTime.now();
        for (int i = 0; i < arr1.length - 1; i++) {
            for (int j = 0; j < arr1.length - 1 - i; j++) {
                if(arr1[j] > arr1[j + 1]){
                    int temp = arr1[j];
                    arr1[j] = arr1[j + 1];
                    arr1[j + 1] = temp;
                }
            }
        }
        LocalDateTime now2 = LocalDateTime.now();
        printArr(arr1);
        System.out.println("冒泡排序耗时:"+ Duration.between(now1, now2).toNanos() +"纳秒");

        //二叉树排序
        now1 = LocalDateTime.now();
        TreeSet ts = new TreeSet<>();
        for (int i = 0; i < arr2.length; i++) {
            ts.add(arr2[i]);
        }
        now2 = LocalDateTime.now();
        System.out.println (ts);
        System.out.println("二叉树排序耗时:"+ Duration.between(now1, now2).toNanos() +"纳秒");

        //插入排序
        now1 = LocalDateTime.now();
        int startIndex = -1;
        for (int i = 0; i < arr3.length; i++) {
            if(arr3[i] > arr3[i + 1]){
                startIndex = i + 1;
                break;
            }
        }
        for (int i = startIndex; i < arr3.length; i++) {
            int j = i;
            while(j > 0 && arr3[j] < arr3[j - 1]){
                int temp = arr3[j];
                arr3[j] = arr3[j - 1];
                arr3[j - 1] = temp;
                j--;
            }
        }
        now2 = LocalDateTime.now();
        printArr(arr3);
        System.out.println("插入排序耗时:"+ Duration.between(now1, now2).toNanos() +"纳秒");
    }
    private static void printArr(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
}
 冒泡排序:

相邻的元素两两比较,大的放右边,小的放左边。

外循环:表示要执行多少轮。

内循环:每一轮中找到当前的最大值

二叉树排序:

使用add方法自然排序

插入排序:

将 0 索引的元素到 N 索引的元素看做是有序的,把 N+1 索引的元素到最后一个当成是无序的
遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面

困惑:

时间间隔为0

当使用更长的数组排序时,时间间隔不为0

感悟:

冒泡排序效率低

你可能感兴趣的:(java练习3)