Java选择排序

算法步骤

设数组为a[0…n-1]。

1.      初始时,数组全为无序区为a[0..n-1]。令i=0

2.      在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交换。交换之后a[0…i]就形成了一个有序区。

3.      i++并重复第二步直到i==n-1。排序完成。

算法图示

算法基本性能

排序方法 平均情况 最好情况 最坏情况 控件复杂度 稳定性
选择排序 O(n2) O(n2) O(n2) O(1) 不稳定

Java代码

package com.sort;

import java.util.Random;

public class Main3 {

    // 从小到大
    private static void sort(int[] array) {
        if (array.length <= 1) {
            return;
        }
        for (int i = 0; i < array.length - 1; i++) {
            int min = i;
            /**
             * 在i+1~array.length-1的下标范围内找出最小的一个元素的下标
             */
            for (int j = i + 1; j < array.length; j++) {
                if (array[min] > array[j]) {
                    min = j;
                }
            }
            /**
             * 如果最小的下标变化了,那么交换
             */
            if (min != i) {
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
        }
    }

    /**
     * 获取指定长度的随机数组
     */
    public static int[] getRandomArray(int n) {
        int[] array = new int[n];
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(500);
        }
        return array;
    }

    /**
     * 打印指定数组
     */
    public static void outputArray(int[] array) {
        for (int i : array) {
            System.out.print(i + " ");
        }
        System.out.println("");
    }

    public static void main(String[] args) {
        int[] array = getRandomArray(10);
        outputArray(array);
        sort(array);
        outputArray(array);
    }
}
posted @ 2016-08-19 13:41  27House  阅读(236)  评论(0编辑  收藏  举报