排序算法——选择排序

排序算法——选择排序

选择排序是经典的排序算法之一,他将数据分为有序区和无序区,每一次遍历将会找到无序区中最小的数据,然后插入有序区的末尾。具体过程如下:

  1. 定义a[0]…..到 a[n-1] 的N位数的数组
  2. 第一次遍历,找到数组中 a[0] 到 a[n - 1] 中的最小数 ,然后与a[0] 交换(如果a[0] 最小,就与它本身交换)
  3. 第二次遍历,找到数组中 a[1] 到 a[n - 1] 中的最小数 ,然后与a[1] 交换
  4. 第三次遍历,找到数组中 a[2] 到 a[n - 1] 中的最小数 ,然后与a[2] 交换
  5. 第四次遍历,找到数组中 a[3] 到 a[n - 1] 中的最小数 ,然后与a[3] 交换
  6. 第 i 次遍历,找到数组中a[i-1] 到 a[n-1] 中的最小数,然后与a[i] 交换

选择排序的代码实现如下(java)

package com.hbcode.sort;

/**
 * Created by IntelliJ IDEA.
 * User:hubin
 * Description:选择排序
 * Date:2018/1/10
 * Time:8:40
 */
public class Selection {

    public static void  main(String[] agrs){

        double[] data = {1,2,1,6,7,81,2,3123,42,321};
        sort(data);
        disPlay(data);
    }

    /**
     * 选择排序
     * @param data
     */
    public static void sort(double[] data){
        for(int i = 0; i < data.length ;i++){
            //data[0]....到 data[i-1] 是有序区,a[i] 到 data[data.length - 1] 是无序区
            int min = i;
            //找到 data[i] 和data[data.length - 1]中最小的数
            for(int j = i; j < data.length;j++){
                if(less(data[j],data[min])){
                    min = j;
                }
            }
            //将 data[i] 和 data[data.length - 1]中最小的数与data[i]交换
            each(data,i,min);
        }
    }

    /**
     * 打印数组
     * @param data
     */
    public static void disPlay(double[] data){
        for (int i =0; i <data.length;i++){
            System.out.print(data[i] + "  ");
        }
    }

    /**
     * 交换数组中两数据位置
     * @param data
     * @param i
     * @param j
     */
    public static void each(double[] data,int i,int j){
        double temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }

    /**
     * 比较两数据大小
     * @param a
     * @param b
     * @return
     */
    public static boolean less(double a,double b){
        return  a < b ? true:false;
    }
}

运行结果为
这里写图片描述
选择排序是一种简单很容易实现的排序算法,选择排序的运行时间与输入数据没有关系,每一次查找无序区中的最小数都要遍历一次无序区,所以在某些情况下,比如待排序的数组已经是有序的了,但他的运行速度和同长度的无序数组排序所需的速度一样,这是他的缺点

猜你喜欢

转载自blog.csdn.net/hubin916/article/details/79084847