算法——选择排序

来源:互联网 发布:故宫 书目 知乎 编辑:程序博客网 时间:2024/06/05 20:43

踏踏实实学算法,从今天开始,从现在开始。

选择排序的思想:从开始遍历选择最小的元素与第一个元素进行交换,则第一个数字为最小,再从剩下元素中选择最小的元素与第二个进行交换,直到最后一个元素,数组实现排序。(从结尾遍历选择最大的元素)

优化:把在无序序列中选择最大元素的过程写成一个函数,更加容易理解。

public class SelectionSort {    /**     * 写在一个函数里,找最大     * @param array     */    public static void sortOne(int[] array){        int length = array.length;        for (int i = length-1; i > 0; i--) {            int index = i;            for ( int j = index - 1; j >= 0; j--) {                if (array[j] > array[i]) {                    index = j; // 标记未排序元素中最大数的位置                }            }            // 未排序中最大数与未排序中最后一个数交换            if (i != index) {                int temp = array[i];                array[i] = array[index];                array[index] = temp;            }        }    }    /**     * 写在一个函数里,找最小     * @param array     */    public static void sortOneOne(int[] array) {        int length = array.length;        for (int i = 0; i < length - 1; i++) {            int index = i;            for (int j = index; j <= length-1; j++) {                if (array[j] < array[i]) {                    index = j;                }                if (i != index) {                    int temp = array[i];                    array[i] = array[index];                    array[index] = temp;                }            }        }    }    /**     * 写在两个函数里     * @param array destination array     */    public static void sortTwo(int[] array) {        int length = array.length;        for(int i = length-1; i > 0; i--) {            int index = indexOfLargest(array, 0, i);            int temp = array[index];            array[index] = array[i];            array[i] = temp;        }    }    /**     * 找到数组指定范围的最大值的index     */    private static int indexOfLargest(int[] array, int start, int end) {        int max = array[start];        int index = 0;        for (int i = start+1; i <= end; i++) {            if (array[i] > max) {                max = array[i];                index = i;            }        }        return index;    }    public static void main(String[] args) {        int[] array = {0,9,8,7,6,5,4,3,2,1};//      SelectionSort.sortOne(array);//      SelectionSort.sortOneOne(array);        SelectionSort.sortTwo(array);        for(int i = 0; i < array.length; i++) {            System.out.print(array[i] + " ");        }    }}

如果本博客对你有一定帮助,客官请留下你的脚步吧…

原创粉丝点击