插入排序的基本操作就是将一个记录插入到一个有序序列中的合适位置,使得该序列在插入之后仍然是有序的。插入排序分为直接插入排序和希尔排序。这里就先谈一谈直接插入排序吧。
直接插入排序思想
直接插入排序的思想很简单。就是把一个记录插入到有序的记录当中去,核心的操作就是在有序的记录中去寻找合适的插入点。
算法实现思路
根据算法的思想,算法的实现思路不难。假设有如下的序列:
位置 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
初始 | (64) | 37 | 83 | 64 | 72 | 28 | 55 |
(1) | (37 | 64) | 83 | 64 | 72 | 28 | 55 |
(2) | (37 | 64 | 83) | 64 | 72 | 28 | 55 |
(3) | (37 | 64 | 64 | 83) | 72 | 28 | 55 |
(4) | (37 | 64 | 64 | 72 | 83) | 28 | 55 |
(5) | (28 | 37 | 64 | 64 | 72 | 83) | 55 |
(6) | (28 | 37 | 55 | 64 | 64 | 72 | 83) |
从上面的过程中我们可以看出所有的执行过程。代码实现如下:
package thread;
public class InsertSort {
public static int[] sort(int str[]){
for(int i=1;i<str.length;i++){
int key = str[i]; //待插入的数字
//遍历前面的有序序列,寻找插入点
for(int j=i-1;j>=0;j--){
//找到插入点,插入点的下标为j
if(str[j]>key){
//插入点原来的数字后移一位,放入key
int temp = str[j]; //暂时存插入点的值
str[j] = key;
//插入点后面的全部后移一位
str[j+1] = temp;
}
}
}
return str;
}
public static void main(String[] args) {
int s[] = {64,37,83,64,72,28,55};
int str[] = InsertSort.sort(s);
for(int i :str){
System.out.println(i);
}
}
}