排序算法--选择排序

来源:互联网 发布:c语言从入门到精通怎样 编辑:程序博客网 时间:2024/06/13 08:19

一.算法描述

选择排序是最简单,也是最容易理解的一种算法。在选择排序中,数组分为有序和无序两部分,先选择出无序部分最小的元素,然后插入到有序部分后端来实现排序。具体实现过程如下:

  1. 从数组a[n]中选择最小的元素,将其与a[0]交换位置;
  2. 从a[1]到a[n-1]中选择最小的元素,将其与a[1]交换位置;
  3. 重复以上步骤,直到排序进行到a[n-1]。此时排序完成。

选择排序


二.算法特性

1.时间复杂度

最好情况:O(n²)

最坏情况:O(n²)

平均情况:O(n²)

选择排序的时间复杂度与输入无关。就算输入一个已经有序的数组,选择排序还是会将每个元素一一进行比较,所以一个完全无序的数组与一个已经有序的数组的运行时间是完全相同的。
同时,选择排序的数据移动是所有的排序算法中最少的。由于每一次交换都能实现一次排序,所以交换的总次数总是数组的长度n,而时间复杂度取决于比较的次数。

2. 空间复杂度

O(1)

选择排序除了交换的时候需要的用于存放一个元素的空间,不需要其他额外的空间开销,所以空间复杂度为O(1)。

3. 稳定性

不稳定

由于选择排序的方式是选择出最小的元素然后再交换,所以在交换的过程中,一个较小的元素位于两个较大的相同元素后面时,那两个相同元素中位于前面的那一个就会被交换到后面去,这时原数组的顺序就会被打乱,所以选择排序是一种不稳定排序。


三.算法实现

//选择排序public void selectionSort(Object[] a) {    for(int i = 0; i < a.length; i ++) {        for(int j = i + 1; j < a.length; j ++) {            if(a[i] > a[j])                exch(a, i, j); //交换数组a中第i、j个元素        }    }}
原创粉丝点击