选择排序-java
来源:互联网 发布:高性能网络编程 陶辉 编辑:程序博客网 时间:2024/04/30 15:15
选择排序-java
转载请注明出处:http://blog.csdn.net/a740169405/article/details/50716196
思路:
选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n - 1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。
循环方式:
/** * 选择排序(循环) * @param arr 数组 */private static void selectSort(int[] arr) { int index; for (int i = 0; i < arr.length - 1; i++) { index = i; for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[index]) { index = j; } } if (index != i) { change(arr, i, index); } }}
递归方式:
/** * 选择排序(递归) * @param arr 数组 * @param index 目标位置 */private static void selectSort2(int[] arr, int index) { if (index < 0 || index >= arr.length - 1) { return; } int tag = index; for (int i = index; i < arr.length; i++) { if (arr[i] < arr[index]) { tag = i; } } if (tag != index) { change(arr, tag, index); } selectSort2(arr, index+1);}
调用代码:
int[] array = new int[] {3, 7, 4, 56, 34, 12, 90, 67, 24};int[] arr = new int[] {1, 45, 78, 23, 12, 98, 150, 1, 45};selectSort(array);System.out.println(Arrays.toString(array));selectSort2(arr, 0);System.out.println(Arrays.toString(arr));
结果:
时间复杂度分析:
在一趟选择,如果当前元素比一个元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。比较拗口,举个例子,序列5
8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
时间复杂度参考:
http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html
0 0
- 排序-选择排序-Java
- 【选择排序】直接选择排序--Java
- 选择排序----直接选择排序----java实现
- JAVA 冒泡排序 选择排序
- Java--选择排序,冒泡排序
- 排序算法-选择排序 java
- 算法:排序----Java选择排序
- Java排序之选择排序
- 【选择排序】堆排序--Java
- java冒泡排序,选择排序
- java 排序算法-选择排序
- Java排序二:选择排序
- JAVA--冒泡排序、选择排序
- java简单排序-选择排序
- java 排序 之选择排序
- Java排序之选择排序
- [Java]冒泡排序、选择排序
- Java 排序之 选择排序
- BZOJ 1183 Croatian2008 Umnozak
- SwipeRefreshLayout完美添加及完善上拉加载功能
- java将集合保存到excel中
- 本科教育忽略的黄金C++<3> 泛型算法
- 【算法总结】Binary search 二分法
- 选择排序-java
- Android 获取当前网速质量调整网络请求
- EntityManager方法简介
- AsyncTask和Handler的优缺点比较
- UIApplication讲解
- bzoj3673&3674 可持久化并查集 可持久化线段树
- 网络请求之HttpURLConnection[不全,以后在补充]
- 分享一个免费的虚拟主机
- SpriteSheet(精灵列表)在Android中的应用