选择排序(Selection sort),它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
相比于冒泡排序,比较次数并没有减少,但是交换次数大大减少,大O表示法为O(N)。
代码如下:
先写个工具类
public class SelectArray {
private long[] a;
private int nElems;
public SelectArray(int max) {
a = new long[max];
nElems = 0;
}
//插入数据
public void insert(long value){
a[nElems] = value;
nElems++;
}
//遍历数组
public void display(){
for (int i=0;i<nElems;i++){
System.out.printf(a[i]+" ");
}
System.out.printf(" ");
}
public void SelectSort() {
int out, in, min; //下标
for (out = 0; out < nElems; out++) {
min = out;
for (in = out + 1; in < nElems; in++) {
if (a[in] < a[out]) {
min = in;
swap(out, min);
}
}
}
}
//交换位置
public void swap(int one,int two){
long temp = a[one];
a[one] = a[two];
a[two] = temp;
}
}
入口函数:
public class SelectSort {
public static void main(String[] args){
int maxSize = 100;
SelectArray arr = new SelectArray(maxSize);
arr.insert(77);
arr.insert(88);
arr.insert(11);
arr.insert(33);
arr.insert(00);
arr.insert(99);
arr.insert(22);
arr.insert(44);
arr.insert(66);
arr.insert(55);
arr.display();
arr.SelectSort();
System.out.println("___________分割线__________________");
arr.display();
}
}
结果如下:
77 88 11 33 0 99 22 44 66 55 ___________分割线__________________
0 11 22 33 44 55 66 77 88 99
解释:每一轮都找到最小的