1.1 选择排序:不断地选择剩余元素中的最小(大)者
2016-04-15 10:22
309 查看
思路:
找到剩余数组(A[I…A.length-1])中第i小的元素(0< =i < A.length)
将它与数组的下标为i的元素交换位置
如此循环,直到i > A.length-1
引自《算法》:
首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和字节交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此反复,直到将整个数组排序。
Java实现:
总结:
对于长度为N的数组,选择排序需要大约N次交换和Math.pow(N,2)/2次比较
运行时间与输入无关
数据移动是所有算法中最少的
找到剩余数组(A[I…A.length-1])中第i小的元素(0< =i < A.length)
将它与数组的下标为i的元素交换位置
如此循环,直到i > A.length-1
引自《算法》:
首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和字节交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此反复,直到将整个数组排序。
Java实现:
/*** 1. 不使用额外空间交换两个数的值 2. 此方法有溢出的可能 3. @param a 数组 4. @param i 要交换的第一个数的下标 5. @param j 要交换的第二个数的下标 */ private static void exch(int[] a,int i,int j) { a[i]=a[i]+a[j]; a[j]=a[i]-a[j]; a[i]=a[i]-a[j]; } /** 6. 从小到大对数组进行选择排序 7. @param a 要排序的数组 */ public static void sort(int[] a) { int N=a.length; for (int i = 0; i < N; i++) { int min=i; for (int j = i+1; j < N; j++) { if (a[j] < a[min]) { min=j; } } exch(a,i,min); } }
总结:
对于长度为N的数组,选择排序需要大约N次交换和Math.pow(N,2)/2次比较
运行时间与输入无关
数据移动是所有算法中最少的
相关文章推荐
- 第一次使用Android Studio时你应该知道的一切配置
- pgsql和mysql外键差异 2016.04.14回顾
- LeetCode笔记:217. Contains Duplicate
- ios基础笔试题-集锦二
- 创建线注记LineElement
- openresty--基于redis实现一个动态路由
- 模拟打字软件
- [MFC] VS2013版本MFC工程移植到VC6.0上
- VC++源码分析 - 中国象棋源码分析
- Error configuring from input stream. Initial cause was 1 字节的 UTF-8 序列的字节 1 无效
- [scoi2005]王室联邦 解题报告
- http请求之编码问题
- 字典与集合常用总结
- fiddler使用方法
- 流分组
- dedecms当前栏目高亮显示方法
- 创建一个点状注记(MarkerElement)
- ProgressBar的使用
- MDB application bea_wls9_async_response is NOT connected to mesagingsystem
- Java反射setAccessible()方法