数组排序之直接选择排序

版权声明:未经博主同意不得转载 https://blog.csdn.net/huang_qiang123/article/details/82913348

一、基本思想

直接选择排序属于选择排序的一种,其排序速度要比冒泡排序快,其基本思想就是将指定排序位置与其他数组元素分别进行对比,如果满足条件就交换元素值,注意区别冒牌排序,这里不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都已成为排序好的格式。

这就好比军训时排队一样,先从一群学生中找出最高的放在第一位,然后在选出第二高的放在第二位,一次类推直到结束。与冒泡排序相比,直接选择排序的交换次数要少很多,所以速度会更快一些。

二、算法实现

package cn.szxy.hq;

/**
 * Created by HQ on 2018/9/30.
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] array = {12, 78, 22, 63, 65, 40, 23};
        SelectSort selectSort=new SelectSort();

        System.out.println("排序前:");
        selectSort.showArray(array);
        selectSort.sort(array);
        System.out.println("排序后:");
        selectSort.showArray(array);
    }

    /**
     * 直接选择排序
     * @param array
     */
    public void sort(int[] array) {
        int index;
        for (int i = 1; i < array.length; i++) {
            index = 0;  //  记载下标
            for (int j = 1; j < array.length - i; j++) {
                if (array[j] > array[index]) {
                    index = j;
                }
            }
            //交换位置在array.length-i和index(最大值)上的两个数
            int temp = array[array.length - i];//把第一个元素保存到临时变量中
            array[array.length - i] = array[index];//把第二个元素值保存到第一个元素中
            array[index] = temp;//把临时变量的值保存到第二个元素中
        }
    }

    /**
     * 显示数组中的元素
     *
     * @param array
     */
    public void showArray(int[] array) {
        for (int i : array) {   //遍历数组
            System.out.print(i + " ");    //输出每一个元素的值
        }
        System.out.println();
    }
}

三、运行结果

猜你喜欢

转载自blog.csdn.net/huang_qiang123/article/details/82913348