您的位置:首页 > 其它

插入排序(insertion sort)

2014-02-21 00:00 246 查看
摘要: 排序 直接插入排序

直接插入排序



排序过程如上图(图非原创)

该排序原理如下:

将一个拥有n个元素的待排序的数据序列R数组当成两个序列(本身还是一个序列),一个有序序列,一个无序序列。刚开始时,有序序列中只有一个元素,也就是R[0],而无序序列中则是R[1]到R[n-1]。然后每次拿出无序序列中第一个元素,此时是R[1],将其与有序序列中的最后一位数字作比较,如果无序序列中的第一个元素<有序序列中的最后一个元素,说明此时要对该数字进行排序。而排序的操作则是将无序序列中的第一个元素进行缓存到变量temp,然后与有序序列中的最后一个元素比较,如果temp比有序序列中的最后一个元素小,那么将有序序列的最后一个元素向后移动一位,然后接着拿有序序列中的前一位与temp比较,直到找到这个数值(temp)合适的位置,然后将该数值直接插入到该位置上。所以叫做直接插入排序。

具体代码如下:

public int[] sort(int[] sort) {
int temp;                              // 监视哨,也就是缓存即将用于比较的数字
int i, j;
// 从数组第2个数字开始与前一个数字比较
for (i = 1; i < sort.length; i++) {
if (sort[i] < sort[i - 1]) {
temp = sort[i];                 // 将要进行插入的数字缓存
// 查找这个数字的适当位置
// 将缓存的数字temp与有序序列中最后一位数字依次向前进行比较,
// 如果它比有序序列中的数字小,那么将有序序列中的那个数字向后移一位,
// 否则该位置就是temp元素应该在的位置,那么插入该数字即可。
for (j = i ; j > 0 && sort[j-1] > temp; j--) {
sort[j] = sort[j-1];
}
sort[j] = temp;
}
}
return sort;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: