习题1:使用指针和动态存储管理,利用冒泡排序和选择排序分别长度为100的数组进行排序,并实现折半查找。 函数原型如下: void sort_select(int* p, int length) void sort_change(int* p, int length) int bi_search(int *p, int length, int dest)
时间: 2023-06-11 22:07:24 浏览: 103
实验一、冒泡排序算法和递归算法.doc
以下是代码实现:
```
#include <stdio.h>
#include <stdlib.h>
void sort_select(int* p, int length) {
int i, j, temp, min_index;
for (i = 0; i < length - 1; i++) {
min_index = i;
for (j = i + 1; j < length; j++) {
if (*(p + j) < *(p + min_index)) {
min_index = j;
}
}
if (min_index != i) {
temp = *(p + i);
*(p + i) = *(p + min_index);
*(p + min_index) = temp;
}
}
}
void sort_change(int* p, int length) {
int i, j, temp;
for (i = 0; i < length - 1; i++) {
for (j = 0; j < length - i - 1; j++) {
if (*(p + j) > *(p + j + 1)) {
temp = *(p + j);
*(p + j) = *(p + j + 1);
*(p + j + 1) = temp;
}
}
}
}
int bi_search(int *p, int length, int dest) {
int low = 0, high = length - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (*(p + mid) == dest) {
return mid;
} else if (*(p + mid) > dest) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
int main() {
int i, dest, index;
int length = 100;
int* p = (int*)malloc(sizeof(int) * length);
for (i = 0; i < length; i++) {
*(p + i) = rand() % 100;
}
printf("Original array:\n");
for (i = 0; i < length; i++) {
printf("%d ", *(p + i));
}
printf("\n");
printf("After selection sort:\n");
sort_select(p, length);
for (i = 0; i < length; i++) {
printf("%d ", *(p + i));
}
printf("\n");
printf("After change sort:\n");
sort_change(p, length);
for (i = 0; i < length; i++) {
printf("%d ", *(p + i));
}
printf("\n");
dest = rand() % 100;
printf("Binary search for %d:\n", dest);
index = bi_search(p, length, dest);
if (index == -1) {
printf("Not found.\n");
} else {
printf("Found at index %d.\n", index);
}
free(p);
return 0;
}
```
首先在 `main` 函数中动态分配了一个长度为 100 的整型数组,并使用 `rand` 函数生成随机数填充数组。
然后依次调用 `sort_select` 和 `sort_change` 函数对数组进行选择排序和冒泡排序。
最后使用 `bi_search` 函数进行折半查找,查找随机生成的一个数是否在数组中出现。如果找到了,返回它在数组中的下标,否则返回 -1。
需要注意的是,在使用完动态分配的内存后,需要调用 `free` 函数释放它们。
阅读全文