【排序算法】 选择排序 selection sort(选择类排序)
2017-06-20 10:42
288 查看
【排序算法】 选择排序 selection sort(选择类排序)
选择排序的描述
遍历数组array,下标 i 的范围是[0, length);当遍历到下标为 i 的元素时,当前元素和 [i, length)中的最小元素交换位置。
通俗的描述是,
遍历数组,选择当前位置到末尾的所有元素中的最小者,与当前元素交换位置
也即是,不断地选择剩余元素(包含当前元素)中的最小者,与当前元素交换位置
选择排序的优缺点
缺点,运行时间与输入无关。为了找出剩余元素中的最小者而扫描一遍数组,但并不能为下一遍的扫描提供可以利用的信息。
对于一个有序的数组(或者全部元素都相等的数组)和一个元素随机排列的数组所需要的排序时间是一样的。
而其他算法更善于利用输入的初始状态。
优点,数据移动是最少的。
选择排序用了 N 次交换 —— 交换次数和数组的大小是线性相关的。
而其他排序算法的交换次数大多是线性对数或者平方级别的。
时间复杂度
时间复杂度为O(n^2)稳定性
不稳定适用场景
简单选择排序的实现
package algorithm.algorithm4.ch02_sort; /** * algorithm: selection sort,选择排序 * @author liyazhou * @create 2017-06-20 10:05 */ import org.junit.Test; import java.util.Arrays; import java.util.Random; public class Selection { public static void sort(Comparable[] arr){ for (int i = 0; i < arr.length; i ++){ int minIdx = i; for (int j = i + 1; j < arr.length; j ++){ if (arr[j].compareTo(arr[minIdx]) < 0) minIdx = j; } if (minIdx != i){ Comparable tmp = arr[i]; arr[i] = arr[minIdx]; arr[minIdx] = tmp; } } } @Test public void test(){ int N = 15; Integer[] arr = new Integer ; Random random = new Random(); for (int i = 0; i < N; i ++) arr[i] = random.nextInt(100); System.out.println(Arrays.toString(arr)); Selection.sort(arr); System.out.println(Arrays.toString(arr)); } }
相关文章推荐
- 排序算法-选择排序 Selection Sort
- 排序算法---选择排序(Selection Sort)
- 常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)
- 常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)
- 排序算法总结之选择排序 Selection Sort
- 排序算法--选择排序(Selection Sort)_C#程序实现
- 基本排序算法01----选择排序(selection sort)
- 排序算法(二)——选择排序及改进
- 排序算法——桶排序、冒泡排序、快速排序、选择排序
- 三种基础排序算法(选择排序、插入排序、冒泡排序)
- 浅析各类排序算法(七) 选择类排序之堆排序
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 【排序算法】选择排序原理及Java实现
- 常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
- 算法系列(三)排序算法上篇--冒泡排序插入排序和选择排序
- 排序算法的C++ && Python实现---选择排序
- (1)排序算法——选择排序
- C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序
- 排序算法汇总之直接选择排序
- 排序算法-SelectSort-选择排序