标签:
选择排序
实现思路:
1、将需排序的集合设为A,已经排好顺的集合为B(在未排序前B集合为空)。
2、每次从A集合中查找出最大或者最小的元素后放入集合B中
3、同时将该元素从集合A中移除.
4、循环执行以上两步直到集合A为空,B集合中的元素就有序了.
缺点:
效率低,时间复杂度为 O(n*n),是一种只适合小数据集的原地排序算法。
示范代码
| 1 | public class CommSort { |
| 2 | // 比较大小 |
| 3 | @SuppressWarnings({ "rawtypes", "unchecked" }) |
| 4 | public int compareElement(Comparable a, Comparable b) { |
| 5 | return a.compareTo(b); |
| 6 | } |
| 7 | |
| 8 | // 交换元素 |
| 9 | public <T> void exchangeElement(T[] a, int i, int j) { |
| 10 | T tmp = a[i]; |
| 11 | a[i] = a[j]; |
| 12 | a[j] = tmp; |
| 13 | } |
| 14 | |
| 15 | // 选择排序 |
| 16 | public <T> void SelectionSort(Comparable<T>[] a) { |
| 17 | int len = a.length; |
| 18 | int minIndex = 0; |
| 19 | for (int i = 0; i < len; i++) { |
| 20 | minIndex = i; |
| 21 | for (int j = i; j < len; j++) { |
| 22 | if (compareElement(a[j], a[minIndex]) < 0) { |
| 23 | minIndex = j; |
| 24 | } |
| 25 | } |
| 26 | exchangeElement(a, i, minIndex); |
| 27 | } |
| 28 | } |
| 29 | } |
插入排序
实现思路:
1、将需排序的集合设为A,已经排好顺的集合为B(在未排序前B集合为空)。
2、依次从集合A中获取元素并与集合B中的元素一次比较(如:按照数组下标从大到小的顺序),在集合B中找到该元素合适的位置放入(如果是升序排序,该元素应大于在它前面的元素,小于在后面的元素)
3、循环第二步操作直到集合A为空。
优点:
效率很高,特别对部分有序的数据集进行排序效果更好。
缺点:
适合小数据集的排序,对数据集比较大的集合进行排序效率较低。
示例代码:
| 1 | // 插入排序 |
| 2 | public <T> void InsertSort(Comparable<T>[] a) { |
| 3 | int len = a.length; |
| 4 | for (int i = 1; i < len; i++) { |
| 5 | for (int j = i; j > 0 && compareElement(a[j], a[j - 1]) < 0; j--) { |
| 6 | exchangeElement(a, j, j - 1); |
| 7 | } |
| 8 | } |
| 9 | } |
希尔排序
实现思路:
1、实现思路与插入排序一样,唯一的不同是希尔排序在插入排序的基础上加入了跳跃比较。
2、插入排序的跳跃步进值为一直都为1。
3、希尔排序只有最后一次的轮询比较,跳跃步进值才为1.
优缺点与插入排序一样。
示例代码:
| 1 | // 希尔排序 |
| 2 | public <T> void ShellSort(Comparable<T>[] a) { |
| 3 | int weight = 0; |
| 4 | int len = a.length; |
| 5 | while (weight < len / 3) { |
| 6 | weight = 3 * weight + 1; |
| 7 | } |
| 8 | while (weight > 0) { |
| 9 | for (int i = weight; i < len; i++) { |
| 10 | for (int j = i; j >= weight |
| 11 | && compareElement(a[j], a[j - weight]) < 0; j -= weight) { |
| 12 | exchangeElement(a, j, j - weight); |
| 13 | } |
| 14 | } |
| 15 | // 减小比较步进 |
| 16 | weight /= 2; |
| 17 | } |
| 18 | } |
标签:
原文地址:http://www.cnblogs.com/jianyuan/p/5358736.html