算法小记:选择排序
2013-12-30 08:57
148 查看
一、思想
选择排序(它在不断的选择剩余元素之中的最小者):首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小元素,将它与数组的第二个元素交换。如此往复,直道将整个数组排序;
二、特点
运行时间与输入无关:找出最小的元素而扫描一遍数组并不能为下一遍扫描提供什么信息;
数据移动是最少的:交换的次数和数组的大小是线性关系;
三、代码
选择排序(它在不断的选择剩余元素之中的最小者):首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小元素,将它与数组的第二个元素交换。如此往复,直道将整个数组排序;
二、特点
运行时间与输入无关:找出最小的元素而扫描一遍数组并不能为下一遍扫描提供什么信息;
数据移动是最少的:交换的次数和数组的大小是线性关系;
三、代码
/** * 选择排序 * * @author pengcx * */ public class Selection { public static void main(String[] args) { String[] a = { "d", "a", "w", "b", "q" }; Selection.sort(a); show(a); } /** * 排序数组a * * @param a * 排序的数组a */ public static void sort(Comparable[] a) { int N = a.length; for (int i = 0; i < N; i++) { // 默认最小元素为a[i] int min = i; // 从a[i+1]至a 中寻找到最小元素 for (int j = i + 1; j < N; j++) { // 如果a[j]比a[min]小,则当前最小元素为a[j] if (less(a[j], a[min])) { min = j; } } // 将a[min]于a[i]交换 exch(a, i, min); } } /** * 交换数组a中的第i个元素和第j个元素 * * @param a * 交换元素的数组a * @param i * 交换元素的索引i * @param j * 交换元素的索引j */ private static void exch(Comparable[] a, int i, int j) { Comparable swap = a[i]; a[i] = a[j]; a[j] = swap; } /** * 比较v和w的大小 * * @param v * 比较的元素v * @param w * 比较的元素w * @return 大小标识 */ private static boolean less(Comparable v, Comparable w) { return (v.compareTo(w) < 0); } private static void show(String[] a) { for (int i = 0; i < a.length; i++) { System.out.print(a[i]); } } }
相关文章推荐
- 基础算法之四--排序: 之选择排序
- 基础算法-直接选择排序
- java冒泡排序 选择排序 算法
- 经典排序算法----选择排序算法及交换两个数据的正确实现
- 几种基本的排序算法:选择排序、插入排序、冒泡排序
- 算法(一)选择排序--蛮力算法的一种
- 数据结构与算法学习:选择排序
- 算法---选择排序
- 数据结构与算法——冒泡排序、选择排序和快速排序
- 冒泡,选择,插入,时间复杂度O(n2)算法感悟(此博文属于对于排序过程有大概了解的同学)
- 【数据结构】算法10.9 选择排序-简单选择排序
- Java数据结构与算法之数组排序——选择
- 图解算法练习--选择排序(PHP实现)
- 排序的选择算法
- 几种排序算法(冒泡排序算法,选择排序算法,快速排序算法,插入排序)
- 算法复习之选择排序
- 算法兴趣----- 一亿数据获取前100个最大值(仅供参考,基于快速排序的实现时间不稳定,基于最小堆实现。如果我们只要求前K个最大(小)值的时候,用堆是最好的选择,因为这里不用每次都排序了)
- c语言中冒泡排序、插入排序、选择排序算法比较
- 算法之排序——交换排序(选择排序,冒泡排序)
- 数据结构与算法之基础排序(冒泡/插入/选择)<十>