使用Java完成《算法导论》习题2.3-6
2015-06-13 14:30
726 查看
public class BinarySreachInsertionSort2_3_6 { /** * 插入排序,利用二分查找寻找插入位置,然而使用二分查找并不能使最坏运行时间降低到Θ(nlgn) * 影响最坏运行时间的代码在已排序子数组的移位以及插入元素部分 * * @date 2015-6-13 * @author lemma */ // doSort方法 public void doSort(int array[]) { // 第一个元素为已排序子数组,因此从第二个元素开始进行插入排序 for (int index = 1; index < array.length; index++) { // 插入排序的元素和应插入位置 int temp = array[index]; int preIndex = index - 1; // 二分查找的起点、终点和中间位置 int start = 0; int end = index - 1; int middle = (start + end) / 2; // 二分查找已排序部分,找出与目标数值最接近的两个数中的一个 for (; start < end;) { if (array[middle] > temp) { end = middle - 1; middle = (start + end) / 2; } else if (array[middle] < temp) { start = middle + 1; middle = (start + end) / 2; } } // 判断middle与应插入数据的关系,决定应插入middle的左边或右边 if (array[middle] <= temp) { for (; preIndex > middle; preIndex--) array[preIndex + 1] = array[preIndex]; //插入元素 array[preIndex + 1] = temp; } else if (array[middle] > temp) { for (; preIndex >= middle; preIndex--) array[preIndex + 1] = array[preIndex]; //插入元素 array[preIndex + 1] = temp; } } } public static void main(String[] args) { int Data[] = { 15, 4, 21, 48, 98, 3, 28, 7, 33, 46 }; new BinarySreachInsertionSort2_3_6().doSort(Data); for (int s : Data) { System.out.print(s + " "); } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树