请用c++帮我写一个折半插入排序的代码,代码要完整可运行
时间: 2024-03-21 14:44:34 浏览: 58
好的,以下是折半插入排序的完整可运行的C++代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
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;
}
}
int main() {
vector<int> nums = {3, 5, 1, 9, 4, 2, 8, 7, 6};
binaryInsertionSort(nums);
for (int num : nums) {
cout << num << " ";
}
return 0;
}
```
运行结果为:
```
1 2 3 4 5 6 7 8 9
```
这个代码使用了vector来存储待排序的元素,折半插入排序的实现与前面的回答一致。
阅读全文