package sort;
/**
* @author linjia
* 折半插入排序
*/
public class BinaryInsertSort {
public int[] binSort(int r[], int n) {
for(int i=1;i<n;i++)
{
int temp=r[i];
int low=0;
int high=i-1;
while(low<=high)
{
int mid=(low+high)/2; //折半
if(temp<r[mid])high=mid-1; //插入点在低半区
else low=mid+1; //插入点在高半区
}
System.out.println("low:"+low+" high:"+high);
for(int j=i-1;j>=high+1;j--)
{
r[j+1]=r[j];
}
r[high+1]=temp;
}
return r;
}
public static void main(String[] args) {
int[] test = { 3, 9, 8, 55, 97, 33, 6, 1 };
test = new BinaryInsertSort().binSort(test, test.length);
for (int i : test) {
System.out.print(i+" ");
}
}
}
结果:
low:1 high:0
low:1 high:0
low:3 high:2
low:4 high:3
low:3 high:2
low:1 high:0
low:0 high:-1
1 3 6 8 9 33 55 97
与直接插入排序相比,折半插入排序明显地减少了关键字的“比较”次数,但记录“移动”次数不变,故时间复杂度为n(o^2)
分享到:
相关推荐
### 数据结构之折半插入排序 #### 知识点概览 1. **折半插入排序的基本概念** 2. **折半插入排序算法原理** 3. **折半插入排序的时间复杂度...此代码实现了折半插入排序,并且按照题目要求输出了每一轮排序的结果。
下面是一个简化的C语言代码示例,展示了折半插入排序的核心逻辑: ```c #include void binary_search(int arr[], int key, int low, int high, int *pos) { while (low ) { int mid = low + (high - low) / 2; ...
在提供的代码片段中,折半插入排序的实现方法如下: ```c void BInsertSort(SqList *L) { // ...代码省略... for (i = 2; i <= L->length; i++) { L->r[0] = L->r[i]; low = 1; high = i - 1; while (low ) { ...
以下是折半插入排序的具体实现代码片段,包括关键步骤: ```c++ void BinarySearchInsertion(int numbers[], const int n) { int middle = 0; for (int i = 1; i ; i++) { int low = 0; int high = i - 1; int...
**折半插入排序详解** 折半插入排序(Binary Insertion Sort)是对直接插入排序的一种优化。在直接插入排序中,我们需要遍历整个已排序部分来找到新元素的正确位置,而折半插入排序则利用了二分搜索算法来减少这个...
本实验涉及了六种常见的排序算法:泡泡排序、直接插入排序、折半插入排序、希尔排序、直接选择排序,并且对每种排序算法进行了性能分析,包括统计执行时间、比较次数和交换次数。这些数据被保存在TXT文件中,便于...
直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现 代码运行正常 不会有任何的问题
本文将深入探讨数据结构中的折半插入排序(Half-Insertion Sort)算法,并通过C++语言实现这一算法。折半插入排序是一种在已排序的数组中寻找合适位置插入新元素的优化方法,其核心思想是利用二分查找减少比较次数,...
10种排序算法代码+综合比较代码(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序),其中不仅有各种排序算法的代码,还包含10种代码在关键字...
本次我们关注的是两种基础排序算法:简单选择排序和折半插入排序,它们都是在C语言环境中实现的数据结构作业。 首先,让我们详细了解这两种排序算法。 **简单选择排序**是一种简单直观的排序算法。它的基本思想是...
#### 三、折半插入排序的实现细节 1. **二分查找的实现**: - 初始化两个指针 `low` 和 `high`,分别指向已排序部分的起始和结束位置。 - 计算中间位置 `mid`,并通过比较中间元素与待插入元素的大小来调整 `low` ...
下面是C++实现折半插入排序的代码: ```cpp template void BinInsertSort(T arr[], const int left, const int right) { int i, j, low, high, mid; T temp; for(i = left+1; i ; i++) { temp = arr[i]; // 暂...
提供五种排序算法的C++实现方法,输入(待排序元素个数、排序码上界(采用随机生成数组方式)),可选择输出(原始数组、排序后数组、原始数组有序度和无序度、排序过程中数据比较次数与数据移动次数、数组中出现...
- 插入排序部分的实现也会影响整体性能,比如二分插入排序比简单插入排序更高效。 - 希尔排序不稳定性:由于可能会改变相等元素的相对顺序,所以希尔排序是不稳定的排序算法。 希尔排序虽然历史悠久,但在实际应用...
而随着对排序需求的增加,折半插入排序和希尔排序则提供了更高效的解决方案,它们通过减少不必要的比较和数据移动,显著提升了算法的执行效率。 值得注意的是,在提供代码实现的"插入类排序"压缩包中,学习者可以...