内部插入排序---折半插入排序
来源:互联网 发布:ejd网络黄金 编辑:程序博客网 时间:2024/05/17 00:07
折半插入排序
只有比别人更早、更勤奋地努力,才能尝到成功的滋味。 ------麦克马斯特大学训言
先找到插入位置(折半查找),再插入。(可减少交换次数)。
记得之前总结过插入排序,有兴趣的可以看看---插入排序。
如果在最复杂的情况下,所要排序的整个数列是逆序的,当第 i-1 趟需要将 第 i 个元素插入前面的 0~i -1 个元素的序列当中的时候,它总是会从第 i -1 个元素开始,逐个比较每个元素的大小,直到找到相应的位置。
这个算法中丝毫没有考虑当要插入第 i 个元素时前面的 0~~ i -1 序列是有序的这个特点。今天要总结的这个算法就充分的利用了这一点。
算法的基本过程:
1)计算 0 ~ i-1 的中间点,用 i 索引处的元素与中间值进行比较,如果 i 索引处的元素大,说明要插入的这个元素应该在中间值和刚加入i索引之间,反之,就是在刚开始的位置到中间值的位置,这样很简单的完成了折半;
2)在相应的半个范围里面找插入的位置时,不断的用(1)步骤缩小范围,不停的折半,范围依次缩小为 1/2 1/4 1/8 .......快速的确定出第 i 个元素要插在什么地方;
3)确定位置之后,将整个序列后移,并将元素插入到相应位置。
算法实现:
import java.util.*;
publicclass BinaryInsertSort {
privatestatic int[] Sort(int[]arr) {
int i, j;
//保存中间插入的值
intinsertNote = 0;
//将待排序的数列保存起来
int[]array = arr;
System.out.println("开始排序:");
for (i =1; i < array.length; i++) {
int low =0;
int high= i - 1;
insertNote = array[i];
//不断的折半
while (low<= high) {
//找出中间值
int mid =(low + high) / 2;
//如果大于中间值
if(array[i] > array[mid]) {
//在大于中间值的那部分查找
low = mid+1;
} else
//在小于中间值的那部分查找
high = mid-1;
}
//将整体数组向后移
for (j=i; j > low; j--) {
array[j] = array[j - 1];
}
//插入到指定的位置
array[low] = insertNote;
System.out.println(Arrays.toString(array));
}
System.out.println("排序之后:");
System.out.println(Arrays.toString(array));
returnarray;
}
publicstatic void main(String[] args) {
Random random = new Random();
int[]array =new int[10];
for (int i = 0; i < 10; i++) {
array[i] =Math.abs(random.nextInt() % 100);
}
System.out.println("排序之前:");
System.out.println(Arrays.toString(array));
BinaryInsertSort.Sort(array);
}
}
- 内部插入排序---折半插入排序
- C++代码,数据结构-内部排序-插入排序-折半插入排序
- 插入排序--折半插入
- 插入排序--折半插入
- 内部排序(二)折半插入法
- 排序:折半插入排序
- 排序--折半插入排序
- 排序-折半插入排序
- 【插入排序】折半插入排序
- 插入排序--折半插入排序
- 折半插入排序,插入排序
- 内部排序之插入排序:直接插入排序,折半插入排序,希尔排序
- 插入排序:表折半插入
- 插入排序(折半插入)
- 排序-插入类排序-折半插入排序
- 折半插入排序
- 折半插入排序
- 折半插入排序算法
- OC中方法与函数的区别
- OAuth 1.0 协议整理
- 黑马程序员——Foundation框架
- jogl中使用顶点数组
- Hadoop中的一些基本操作
- 内部插入排序---折半插入排序
- IOS 圆形头像 UIButton边框 按钮边框
- C++类2
- tomcat6.0发布不了myeclipse的项目
- 连续按2次返回键退出应用 隐藏软键盘
- Reverse Bits
- Django1.8文档阅读手记
- C++/STL Bitset (转)
- 一个简单的将GUI程序的log信息输出到关联的Console窗口中