帮我写一份c++的折半排序和测试代码
时间: 2023-08-31 10:28:56 浏览: 111
### 回答1:
好的,以下是C语言的折半排序代码和测试代码:
```c
#include <stdio.h>
void binaryInsertionSort(int arr[], int n) {
int i, j, left, right, mid, key;
for (i = 1; i < n; i++) {
key = arr[i];
left = 0;
right = i - 1;
while (left <= right) {
mid = (left + right) / 2;
if (key < arr[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
for (j = i - 1; j >= left; j--) {
arr[j + 1] = arr[j];
}
arr[left] = key;
}
}
int main() {
int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
int i;
printf("原始数组为: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
binaryInsertionSort(arr, n);
printf("\n排序后数组为: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这里我们实现了一个折半排序的函数 `binaryInsertionSort()`,它可以对整数数组进行排序。该函数的时间复杂度为 O(nlogn)。
在 `main()` 函数中,我们创建了一个整数数组 `arr`,并调用 `binaryInsertionSort()` 函数对其进行排序。最后,我们打印出原始数组和排序后的数组,以便于检查排序是否成功。
请注意,这只是一个简单的示例代码,仅用于演示折半排序的实现方式。在实际应用中,您可能需要根据具体的需求进行更改和优化。
### 回答2:
折半排序(Binary Insertion Sort)是一种插入排序的变种算法,它可以在有序数组中快速查找到插入元素的位置,从而保持数组始终有序。以下是一个用 C 语言编写的折半排序和测试代码:
```
#include <stdio.h>
// 折半排序函数
void binaryInsertionSort(int array[], int n) {
int i, j, insertValue, low, high, mid;
for (i = 1; i < n; i++) {
insertValue = array[i]; // 获取当前需要插入的元素
low = 0;
high = i - 1;
// 使用折半查找法确定插入位置
while (low <= high) {
mid = (low + high) / 2;
if (insertValue < array[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
// 将大于插入元素的所有元素右移一位
for (j = i - 1; j >= low; j--) {
array[j + 1] = array[j];
}
array[low] = insertValue; // 将插入元素放置到正确的位置
}
}
// 测试函数
void testBinaryInsertionSort() {
int i;
int array[] = {7, 5, 1, 9, 3};
int n = sizeof(array) / sizeof(array[0]);
printf("原始数组:");
for (i = 0; i < n; i++) {
printf("%d ", array[i]);
}
binaryInsertionSort(array, n); // 使用折半排序算法对数组进行排序
printf("\n排序后的数组:");
for (i = 0; i < n; i++) {
printf("%d ", array[i]);
}
}
int main() {
testBinaryInsertionSort(); // 调用测试函数
return 0;
}
```
以上代码中,`binaryInsertionSort` 函数实现了折半排序算法,`testBinaryInsertionSort` 函数则用于测试排序算法的正确性。在 `main` 函数中,我们调用 `testBinaryInsertionSort` 函数执行测试。运行代码后,会输出原始数组和排序后的数组,以验证折半排序算法的正确性。
### 回答3:
折半排序(Binary Insertion Sort)是一种插入排序算法,其原理是将待排序的元素依次插入已经排好序的部分中,通过不断比较并移动元素的方法完成排序。
以下是用C语言编写的折半排序和测试代码:
```c
#include <stdio.h>
// 折半插入排序函数
void binaryInsertionSort(int arr[], int n) {
int i, j, left, right, middle, temp;
for (i = 1; i < n; i++) {
temp = arr[i];
left = 0;
right = i - 1;
// 使用二分查找找到插入位置
while (left <= right) {
middle = (left + right) / 2;
if (arr[middle] > temp) {
right = middle - 1;
} else {
left = middle + 1;
}
}
// 将插入位置右边的元素后移
for (j = i - 1; j >= left; j--) {
arr[j + 1] = arr[j];
}
// 插入元素到正确位置
arr[left] = temp;
}
}
// 测试代码
int main() {
int arr[] = {9, 5, 2, 7, 1, 8, 6, 3, 4};
int n = sizeof(arr) / sizeof(arr[0]);
int i;
printf("原始数组:");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 调用折半插入排序算法
binaryInsertionSort(arr, n);
printf("排序后的数组:");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
以上代码实现了折半排序算法,并测试了排序结果。原始数组为{9, 5, 2, 7, 1, 8, 6, 3, 4},排序后的数组为{1, 2, 3, 4, 5, 6, 7, 8, 9}。
阅读全文