选择排序,缺点很明显,输入与运行时间无关,无论输入什么,他都会跑一遍

数据移动却是最小的,对于一个长度为N的数组,选择排序大约需要N平方/2次比较和N次交换

package sorteselection;

/**

*

* @author Heaven

* 基本的择排序的实现,每次交换两个元素,然后排序后就不需要去烦恼了

* 第一遍我们找到最小的,然后每次进行循环

*/

public class SorteSelection {

public static void sort(Comparable[] a) {//进行排序的方法

for (int i = 0; i < a.length; i++) {

int min =i;//当前最小元素的索引

for (int j = i + 1; j < a.length; j++) {

if (less(a[j], a[min])) {//进行min和i+1(j)的比较;

min = j;//遍历一遍

}

exch(a, i, min);//进行交换

}

}

}

public static boolean less(Comparable a,Comparable a2) {//对元素进行比较

return a.compareTo(a2) < 0;

}

private static void exch(Comparable[] a,int i,int j) {//进行交换

Object n =a[i];

a[i] = a[j];

a[j] = (Comparable<Object>) n;

}

private static void show(Comparable[] a) {

for (int i = 0; i < a.length; i++) {

System.out.println(a[i]+” “);

}//进行输出

}

public static boolean isSorted(Comparable[] a) {//测试是否排序

for (int i = 1; i < a.length; i++) {

if (less(a[i],a[i-1])) {

return false;

}

}

return true;

}

}

每次排序,将本次最小的元素放在最前面,然后缩小范围即可

发表评论

邮箱地址不会被公开。 必填项已用*标注