Selection Sort(选择排序)
来源:互联网 发布:打开淘宝网首页 编辑:程序博客网 时间:2024/05/15 23:47
基本思路:
1.找到未排序的数组中最小的那个元素,用下标为min来标记此为最小的元素
2.将它和未排序数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)
3.如此往复,直到将整个数组排序。
public class Selection { //排序 public static void sort(Comparable[] a) { int N = a.length; for(int i=0;i<N;i++)//总共比较多少趟,每一趟确定前面的一个数据 { int min = i;//假设最小数据是未排序中的第一个数据 for(int j=i+1;j<N;j++)//这一趟需要比较的次数 { if(less(a[j],a[min]))//如果比假设的最小数小 min = j;//则将其下标标记为最小数的下标,内层循环找到最小数的下标 } exch(a,i,min);//交换最小数和未排序的第一个数据的位置 } } //比较大小 private static boolean less(Comparable v,Comparable w) { return v.compareTo(w) < 0; } //交换 private static void exch(Comparable[] a,int i,int j) { Comparable swap = a[i]; a[i] = a[j]; a[j] = swap; } //测试 public static void main(String[] args) { Scanner cin = new Scanner(System.in); int N = cin.nextInt(); Integer[] a = new Integer[N]; for(int i=0;i<N;i++) { a[i] = cin.nextInt(); } sort(a); for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); }}
时间复杂度分析
寻找开销:和输入序列本身无关,它总是要查看所有项来寻找最小项。所以为平方时间
移动开销:每一个元素只需要交换一次就到最终位置,线性次数的交换。
最大的问题在于如果序列本身就是有序的,那么它还是会一遍遍的找最小项。
0 0
- 选择排序(selection sort)
- 选择排序(Selection Sort)
- selection sort 选择排序
- 选择排序 Selection Sort
- 选择排序(Selection Sort)
- 选择排序(Selection Sort)
- 选择排序 (Selection Sort)
- 选择排序(Selection sort)
- 选择排序 (Selection sort)
- 选择排序Selection sort
- Selection Sort(选择排序)
- 选择排序(Selection Sort)
- Selection Sort选择排序
- selection sort 选择排序
- selection sort(选择排序)
- Selection sort 选择排序
- 选择排序Selection sort
- 选择排序(Selection Sort)
- 【原创】screen 用法
- python: numpy-- 函数 argsort 用法
- 【原创】SSH/Python Error:&n…
- JavaSE 学习参考:静态内部类
- 【原创】python-DNS 缓存 配置
- Selection Sort(选择排序)
- 【原创】python socket Proxy.
- Java定时器(实现每月1号、每日、每15分钟自动执行任务)
- 大话设计模式第一讲(简单工厂模式)
- 2017全国深度学习技术应用大会,人工智能将走向更多领域
- 按钮开关效果
- 【原创】python gevent
- 02.Mybatis初级使用-Mybatis核心组件
- 【原创】python-rq Redis-Queue