【排序算法系列 1】冒泡排序 【排序算法系列 2】选择排序 【排序算法系列 3】 插入排序 【排序算法系列 4】 高级排序——希尔排序(插入排序的改进) 【排序算法系列 5】 高级排序——归并排序 【排序算法系列 6】 高级排序——归并排序(由冒泡排序改进) 【排序算法系列 7】堆排序
简介
选择排序是一种更加简单直观的排序方法。
需求
排序前:{4,6,8,7,9,2,10,1}排序后:{1,2,4,5,7,8,9,10}
选择排序原理
每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引。交换第一个索引处和最小值所在的索引处的值。
选择排序API设计
类名Selection
构造方法Selection():创建Selection对象成员方法 11.public static void sort(Comparable[] a):对数组内的元素进行排序成员方法 22.private static boolean greater(Comparable v,Comparable w):判断v是否大于w成员方法 33.private static void exch(Comparable[] a,int i,int j):交换a数组中,索引i和索引j处的值
选择排序的代码实现
public class Selection {
public static void sort(Comparable
[] a
){
for(int i
=0;i
<=a
.length
-2;i
++){
int minIndex
= i
;
for(int j
=i
+1;j
<a
.length
;j
++){
if (greater(a
[minIndex
],a
[j
])){
minIndex
=j
;
}
}
exch(a
,i
,minIndex
);
}
}
private static boolean greater(Comparable v
,Comparable w
){
return v
.compareTo(w
)>0;
}
private static void exch(Comparable
[] a
,int i
,int j
){
Comparable temp
;
temp
= a
[i
];
a
[i
]=a
[j
];
a
[j
]=temp
;
}
}
选择排序的时间复杂度: O(N^2)