您的位置:首页 > 其它

算法--插入排序

2015-06-04 20:23 387 查看
Java版

public class InsertionSort {

public static void main(String[] args) {

int[] a = { 15, 25, 77, 1, 56, 4, 7, 6 };
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println(" ");
insertSort(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}

}

public static int[] insertSort(int[] array) {
if (null == array || array.length < 2) {
return array;
}
// 遍历数组
for (int i = 1; i < array.length; i++) {
// 从后到前遍历
for (int j = i; j > 0; j--) {
// 找到当前数的位置
if (array[j] < array[j - 1]) {
int temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
return array;
}
}


二分插入排序

public static int[] insertSort2(int[] array) {
// 遍历数组
for (int i = 0; i < array.length; i++) {
// 从后往前遍历
int temp = array[i];// 当前值取出来
int left = 0; // 左边界
int right = i - 1; // 右边界
int mid = 0;
while (left <= right) {
mid = (left + right) / 2;
// 二分左区间
if (temp < array[mid]) {
right = mid - 1;
}
// 二分右区间
else {
left = mid + 1;
}
}
// 比当前数大的向后移
for (int j = (i - 1); j >= left; j--) {
array[j + 1] = array[j];
}
// 将当前数插入正确位置
if (left != i) {
array[left] = temp;
}
}
return array;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: