1、基本思想:
二分插入法与直接排序类似,只是在确定插入位置的方法是用二分法,即从第0个数据开始依次折半与待插入的数据进行比较直到找到合适的位置。
2、图示:
3、Java具体代码实现:
package com.leiht.sort;
public class SortBinary {
public static void main(String[] args) {
int[] numbers = { 56, 45, 78, 67, 99, 13, 34, 49, 55, 34, 12, 77, 1 };
System.out.println("排序之前:");
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
}
new SortBinary().sortBinary(numbers);
System.out.println();
System.out.println("排序之后:");
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
}
}
private void sortBinary(int[] numbers) {
for(int i = 0; i < numbers.length; i++) {
int temp = numbers[i];
int left = 0;
int right = i -1;
int middle = 0;
while(left <= right) {
middle = (left + right)/2;
if(numbers[i] > numbers[middle]) {
left = middle+1;
}else {
right = middle-1;
}
}
for(int j = i-1; j >= left; j--) {
numbers[j+1] = numbers[j];
}
numbers[left] = temp;
System.out.println("left=" + left + ",right=" + right + ",middle=" + middle);
}
}
}
4、分析
显然,二分排序是一种稳定的排序方法
- 大小: 46.8 KB
分享到:
相关推荐
使用二分方法实现插入排序
易语言源码二分插入排序.rar 易语言源码二分插入排序.rar 易语言源码二分插入排序.rar 易语言源码二分插入排序.rar 易语言源码二分插入排序.rar 易语言源码二分插入排序.rar
MATLAB实现《算法设计与分析》中的插入排序、二分归并排序、归并排序实验,其中包括.m文件和实验报告,安徽大学本科课程。
易语言二分插入排序源码,二分插入排序,二分直接插入排序
易语言二分插入排序.rar 易语言二分插入排序.rar 易语言二分插入排序.rar 易语言二分插入排序.rar 易语言二分插入排序.rar 易语言二分插入排序.rar
/* * --插入排序-- * 假定这个数组的序是排好的,然后从头往后,如果有数比当前外层元素的值大, * 则将这个数的位置往后挪,直到当前外层元素的... * 该算法可以认为是插入排序的一个变种,称为二分查找排序。 */
系统应具备的功能: (1)从键盘上输入五个学生的考研成绩; (2)实现直接插入排序、二分插入排序、对各科成绩,以及平均成绩从小到大排序; (3)比较各种插入排序的优劣
JS实现二分插入排序
内部排序之二分插入排序 C经典算法之一,值得学习。
常用算法,2分法插入排序的c语言实现。对初学者很有用。
二分插入排序-易语言.zip
易语言源码二分插入排序.7z
在直接插入排序中,我们使用线性搜索来找到新元素应该插入的位置,而在折半插入排序中,我们使用二分搜索来加快查找速度。 以下是折半插入排序的详细步骤: 1. 从第一个元素开始,该元素可以认为已经被排序。 2. ...
程序模拟实验所用到的所有源码,包括冒泡排序,插入排序,代码运行时长统计等。
描述:冒泡排序 * 特点:算法简单但运行速度慢,算法交换次数和比较次数都...描述:二分查找发 核心算法 * 注意:mid = (low + high) >>> 1 不能使用(low + high)/2,因为如何low+high>Integer.MAX_VALUE时会发生溢出
主要为大家详细介绍了Java经典排序算法之二分插入排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排序 堆排序.docx
Delphi直接插入法排序示例..rar