Java排序算法(七):折半插入排序
来源:互联网 发布:在家当淘宝客服 编辑:程序博客网 时间:2024/06/08 14:24
Java排序算法(七):折半插入排序
折半插入排序法,又称二分插入排序法,是直接插入排序法的改良版,也需要执行i-1趟插入,不同之处在于,第i趟插入,先找出第i+1个元素应该插入的的位置,假定前i个数据是已经处于有序状态。
代码实现:
- package sort;
- public class BinaryInsertSortTest {
- public static int count = 0;
- public static void main(String[] args) {
- int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
- print(data);
- binaryInsertSort(data);
- print(data);
- }
- public static void binaryInsertSort(int[] data) {
- for (int i = 1; i < data.length; i++) {
- if (data[i] < data[i - 1]) {
- // 缓存i处的元素值
- int tmp = data[i];
- // 记录搜索范围的左边界
- int low = 0;
- // 记录搜索范围的右边界
- int high = i - 1;
- while (low <= high) {
- // 记录中间位置
- int mid = (low + high) / 2;
- // 比较中间位置数据和i处数据大小,以缩小搜索范围
- if (data[mid] < tmp) {
- low = mid + 1;
- } else {
- high = mid - 1;
- }
- }
- //将low~i处数据整体向后移动1位
- for (int j = i; j > low; j--) {
- data[j] = data[j - 1];
- }
- data[low] = tmp;
- print(data);
- }
- }
- }
- public static void print(int[] data) {
- for (int i = 0; i < data.length; i++) {
- System.out.print(data[i] + "\t");
- }
- System.out.println();
- }
- }
运行结果:
- 5 3 6 2 1 9 4 8 7
- 3 5 6 2 1 9 4 8 7
- 2 3 5 6 1 9 4 8 7
- 1 2 3 5 6 9 4 8 7
- 1 2 3 4 5 6 9 8 7
- 1 2 3 4 5 6 8 9 7
- 1 2 3 4 5 6 7 8 9
- 1 2 3 4 5 6 7 8 9
0 0
- Java排序算法(七):折半插入排序
- Java排序算法(七):折半插入排序
- Java排序算法(七):折半插入排序 .
- Java排序算法(七):折半插入排序
- java折半插入排序算法
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- 排序算法--插入排序(直接插入排序、折半插入、shell排序)的java实现
- Java排序算法(六):折半插入排序
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序算法
- 折半插入排序算法
- 排序算法------折半插入排序
- 【排序算法】折半插入排序
- 【排序算法】折半插入排序
- java实现折半插入排序算法
- PAT测试历程
- 30年来我只坚持三件事
- Java排序算法(六):直接插入排序
- C++中实现类似C中rewind函数功能
- PHP函数error_log的速度与可靠性
- Java排序算法(七):折半插入排序
- 解决linux VPN pptpd连接后客户端不能上网的问题
- C++程序2014年9月月末总结
- Java排序算法(八):希尔排序(Shell排序)
- eclipse could not write file .classpath
- 第十九章 19.5节练习 & 19.6节练习 & 19.8节练习
- Windows下Putty连接虚拟机Ubuntu
- Java排序算法(九):归并排序
- JProfiler 8(一个很好的java性能监控工具) ubuntu