排序算法之--直接选择排序

思想:

很好理解,就是你要从大到小或者从小到大怎么排,然后我每次从中找一个,给你最大或最小的。

分成两拨,一拨找好的有序的,一拨还没找无序的。

// 10 13  18  12  22  11   6  19  8
// max=22
//22 13 18 12 10 11 6 19 8
// 13 18 12 10 11 6 19 8
// 19 18 12 10 11 6 13 8
// 18 12 10 11 6 13 8
然后找到的跟前面的交换位置。

上代码:
 //从大到小
     public static void main(String[] args)
    {
        int[] data=new int[100_000];
        for(int i=0;i<data.length;i++){//随机产生数据
            data[i]=(int)(Math.random()*1000+1);
        }
        //int []  data =new int []{10 ,13 , 18  ,12 , 22,  11  , 6 , 19 , 8};
        long startTime = System.currentTimeMillis();    //获取开始时间
        for(int i=0;i<data.length-1;i++)//一层循环每个数走一遍
        {
             int max_id=i;//第I个数
             for(int j=i+1;j<data.length;j++)//二层循环分堆
             {
                 if(data[j]>data[max_id])
                {
                   max_id=j;//找到比前面的数大的数就取得下标
                }
             }
             if(max_id!=i)//交换
             {
                  int temp= data[i];
                  data[i]=data[max_id];
                  data[max_id]=temp;
             }

        }
        long endTime = System.currentTimeMillis();    //获取结束时间

        System.out.println("程序运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间

    }

测试时间100_000:

还是快排快= =

猜你喜欢

转载自www.cnblogs.com/symkmk123/p/9451542.html