栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

2021-10-25

2021-10-25

优化选择排序

选择排序的思想:第一次外层循环中找出数组中的最小值,放到数组最前端,接下来要遍历的长度就是[1,arr.length-1],(本身可遍历的是[0,arr.length-1]),第二次下来就是[2,arr.length-1]…

优化思想:在一次外层外层循环中找出最小值和最大值,将最小值放到数组开头,将最大值放到数组末尾,这样一次循环之后数组可遍历的长度是[1,arr.length-2],效率比起原来有所提升。

看优化后代码:

public class Selection {

    //优化选择排序,一次i循环找出最小值和最大值。
    public static void main(String[] args) {
        int arr[] = {5,3,2,1,4,7,9,8,6};
        int al = arr.length-1;
        for (int i = 0;iarr[e]){
                    temp = arr[i];
                    arr[i] = arr[e];
                    arr[e] = temp;
                }
                if(arr[al-i] 

优化前:

 public static void main(String[] args) {
        int arr[] = {5,3,2,1,4,7,9,8,6};
        int al = arr.length-1;
        for (int i = 0;iarr[e]){
                    temp = arr[i];
                    arr[i] = arr[e];
                    arr[e] = temp;
                }
            }
        }
        //打印数组
        System.out.print("[");
        for(int j = 0;j 

将两个代码分别用两个线程执行,算出它们的排序时间
上代码:

public class Selection {

    //优化选择排序,一次i循环找出最小值和最大值。
    public static void main(String[] args) {

        Thread thread1 = new Thread(()->{
            System.out.println(Thread.currentThread()+"的执行时间是"+原始());
        });
        Thread thread2 = new Thread(()->{
            System.out.println(Thread.currentThread()+"的执行时间是"+优化());
        });
        thread1.setName("线程1");
        thread2.setName("线程2");
        thread1.start();
        thread2.start();
    }
		
	//创建无序数组
    public static int[] getArray(){
        int[] arr = new int[10000];
        Random random = new Random(500000);
            for (int i = 0;i<10000;i++){
                arr[i] = random.nextInt();
            }
            return arr;
    }

    public static Long 原始(){
        int arr[] = getArray();

        int al = arr.length-1;
        Long time = System.currentTimeMillis();
        for (int i = 0;iarr[e]){
                    temp = arr[i];
                    arr[i] = arr[e];
                    arr[e] = temp;
                }
            }
        }
        return System.currentTimeMillis()-time;
    }

    public static Long 优化(){
        int arr[] = getArray();

        int al = arr.length-1;
        Long time = System.currentTimeMillis();
        for (int i = 0;iarr[e]){
                    temp = arr[i];
                    arr[i] = arr[e];
                    arr[e] = temp;
                }
                if(arr[al-i] 

对500个数据排序结果图
对5000个数据进行排序结果图
对50000个数据进行排序 对200000数据进行排序(50w等的时间太长了)

可以看出优化过后的算法,确实起到了优化的作用,但是仅限于大数据量,因为小数据量来说,创建变量分配内存之类的,会造成一些影响,而且我只是在原来的时间上做了优化,空间优化和不稳定优化没有涉及到,若有不正之处,请谅解和批评指正,不胜感激!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/350605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号