算法:选择排序

在开始编写文章前,有几个问题需要思考一下:

  • 什么是选择排序算法?
  • 如何实现选择排序算法?
  • 选择排序算法的时间复杂度

1. 什么是选择排序算法?

一种最简单的排序算法是这样的:

  1. 找出数组最小的元素,将它和数组的第一个元素互换;
  2. 在剩下的元素中找到最小的元素,将它和数组的第二个元素互换;
  3. 重复执行,直到将整个数组排序。

2. 如何实现选择排序算法?

/*
* 匹配函数
*/
public static boolean less(Comparable a, Comparable b)
{
    return a.compareTo(b) < 0;
}

/*
* 交换函数
*/
public static void exch(Comparable[] a, int i, int j)
{
    Comparable t = a[i]; a[i] = a[j]; a[j] = t;
}

/*
* 排序算法
*/
public void sort(Comparable[] a)
{  
    //将a[]按升序排序
    int N = a.length;
    for(int i = 0; i < N; i++)
    {   //将a[i]和a[i+1,...,N]中最小的元素交换
        int min = i;
        for(int j = i+1; j < N; j++)
        {   
            if(less(a[min],a[j])) min = j;
        }
        exch(a, i, min);
     }
}

实现流程图:

3. 排序算法的复杂度

选择排序算法是最初级的排序算法,它的交换次数:N,比较次数:1 + 2 + 3 + ... + (N - 1) = N(N-1)/2 ~ N*N/2。选择排序不断的选择剩余元素的最小者。

运行时间与输入无关。无论是一个有序数组、主键全部相等的数组还是随机数组他们的排序时间一样长。

数据移动是最少的。每次交换都会改变两个数组元素的值,选择排序只用了N次交换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值