插入排序算法
算法原理
- 排序原理:
- 把所有的元素分为两组,已经排序的和未排序的;
- 找到未排序的组中的第一个元素,向已经排序的组中进行插入;
- 倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他的元素向后移动一位;
API设计
代码实现
package paixu;
import java.util.Arrays;
public class Insert {
public static void sort(Comparable[] o){
for (int i = 1; i < o.length; i++) {
for (int j = i; j > 0; j--) {
if(greater(o[j-1],o[j])){
exch(o,j,j-1);
}else{
break;
}
}
System.out.println(Arrays.toString(o));
}
}
private static Boolean greater(Comparable a,Comparable b){
return a.compareTo(b) > 0;
}
private static void exch(Comparable[] o,int a,int b){
Comparable temp;
temp = o[a];
o[a] = o[b];
o[b] = temp;
}
}
public class InsertTest {
public static void main(String[] args) {
Integer[] o = {10,9,8,7,6,5,4,3,2,1};
Insert.sort(o);
}
}
性能分析
-
最坏情况,也就是待排序的数组元素为{12,10,6,5,4,3,2,1},那么
-
比较的次数为:
(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)*(N-1)/2=N^2/2-N/2;
交换的次数为:
(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)*(N-1)/2=N^2/2-N/2;
总执行次数为:
(N^2/2-N/2)+(N^2/2-N/2)=N^2-N;