选择排序

来源:互联网 发布:真丝睡衣 知乎 编辑:程序博客网 时间:2024/05/29 07:00

思想

选出最大(最小)的数,将该数字与无序区的最后(最前)的数交换。最终达到有序

实现思路

使用双重for循环,依次遍历找出无序区 的最大(最小)值。

实现代码

package sort;import java.util.Random;/** * @author chenkx * */public class SelectSort {    /**     * 选择排序:选出数组中的最大值,将最大值与最后的值交换;程序运行后的,数组末尾已经排序的部分不再遍历     * 百万随机数排序耗时:831833毫秒,约14分钟;     * @param arr     */    public static void selectSort(int[] arr){        int max;        int n;        for(int i=0;i<arr.length;i++){            max = 0;            n = 0;            for(int j=0;j<arr.length-i;j++){                if(max<arr[j]){                     max = arr[j];                     n = j;                }                if(j==(arr.length-i-1)){                     swap(arr,n,j);                }            }        }    }    private static void swap(int[] arr, int n, int j) {        int tem;        tem = arr[n];        arr[n]=arr[j];        arr[j]=tem;    }    public static void main(String[] args) {        int[] arr = new int[1000000];        for(int i = 0; i < arr.length; i++){            arr[i] = new Random().nextInt(1000000);            }        System.out.println(1);//        int[] arr = { 8, 5, 6, 7, 2, 3 };        long startTime=System.currentTimeMillis();        SelectSort.selectSort(arr);        long endTime=System.currentTimeMillis();        System.out.println(endTime-startTime);//        for ( int i : arr ) {//            System.out.println(i);//        }    }}
原创粉丝点击