void binaryInsertionSort(Book books[], int count) { int i, j, left, right, mid; Book tmp; for (i = 1; i < count; i++) { tmp = books[i]; left = 0; right = i - 1; while (left <= right) { mid = (left + right) / 2; if (books[mid].price > tmp.price) { right = mid - 1; } else { left = mid + 1; } } for (j = i - 1; j >= left; j--) { books[j + 1] = books[j]; } books[left] = tmp; } }
时间: 2024-02-14 13:20:33 浏览: 20
这段代码实现了二分插入排序算法,它的时间复杂度为O(N^2),但是与普通的插入排序相比,它的常数因子要小,因此在实际应用中可能会比普通插入排序更快。该算法的思想是,将待排序序列分为已排序和未排序两部分,每次从未排序的部分中取出一个元素,通过二分查找的方式找到它在已排序部分中的位置,然后将它插入到合适的位置上。
相关问题
请用文字给出下面代码的伪代码:void binaryInsertionSort(vector<int>& nums) { int n = nums.size(); for (int i = 1; i < n; ++i) { int key = nums[i]; int left = 0, right = i - 1; while (left <= right) { int mid = left + (right - left) / 2; // 防止溢出 if (nums[mid] > key) { right = mid - 1; } else { left = mid + 1; } } for (int j = i - 1; j >= left; --j) { nums[j + 1] = nums[j]; } nums[left] = key; } }
1. 定义一个名为binaryInsertionSort的函数,该函数接收一个整数类型的vector参数nums。
2. 获取nums的长度n。
3. 循环遍历nums中的元素,从第1个元素开始到第n-1个元素结束。
4. 在每次循环中,先获取当前元素的值key。
5. 定义left和right两个指针,分别指向nums的第一个元素和当前元素的前一个元素。
6. 使用二分查找法在[left, right]范围内找到一个位置mid,使得nums[mid] <= key且nums[mid+1] > key。
7. 将从mid+1到i-1这段区间的元素全部向右移动一个位置。
8. 将key插入到left位置。
9. 循环结束后,nums中的元素将按照升序排列。
10. 函数执行完毕,返回结果。
void InsertSort(int left, int right) {
这是一个插入排序的函数,它可以对一个数组中的元素进行排序。left和right分别表示数组的左右边界。
函数的具体实现如下:
1. 从left+1开始遍历数组,依次将元素插入到前面已经排好序的序列中。
2. 对于每一个待插入的元素,将它与前面的元素进行比较,直到找到一个位置,使得它前面的元素都比它小,后面的元素都比它大。
3. 将该元素插入到该位置,然后继续遍历下一个待插入的元素,直到遍历完整个数组。
函数的代码如下:
```
void InsertSort(int left, int right) {
for(int i=left+1; i<=right; i++) {
int j = i-1;
int temp = a[i];
while(j>=left && a[j]>temp) {
a[j+1] = a[j];
j--;
}
a[j+1] = temp;
}
}
```
其中,a是待排序的数组。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)