c语言: (1)输入 10 个职工号; (2)按职工号从小到大排序: (3) 要求输入一个职工号,用折半法找出来。(用指针实现)
时间: 2023-09-09 13:05:21 浏览: 110
### 回答1:
以下是C语言代码实现:
```c
#include <stdio.h>
void bubble_sort(int arr[], int n);
int binary_search(int arr[], int n, int key);
int main() {
int arr[10];
printf("请输入 10 个职工号:\n");
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
bubble_sort(arr, 10);
printf("排序后的职工号为:\n");
for (int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int key;
printf("请输入要查找的职工号:\n");
scanf("%d", &key);
int index = binary_search(arr, 10, key);
if (index == -1) {
printf("没有找到该职工号\n");
} else {
printf("职工号 %d 的位置为 %d\n", key, index);
}
return 0;
}
// 冒泡排序
void bubble_sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 折半查找
int binary_search(int arr[], int n, int key) {
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == key) {
return mid;
} else if (arr[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
```
其中,`bubble_sort` 函数使用冒泡排序对数组进行从小到大排序,`binary_search` 函数使用折半查找算法在有序数组中查找指定的职工号。最后,在 `main` 函数中,先输入 10 个职工号,然后进行排序,并输出排序后的结果。接着,输入要查找的职工号,调用 `binary_search` 函数进行查找,并输出结果。
### 回答2:
C语言:
(1)需要先定义一个长度为10的整数数组,用来存储输入的10个职工号。使用for循环,循环10次,每次将输入的职工号保存到数组的对应位置。
(2)按职工号从小到大排序,可以使用冒泡排序算法。通过两层嵌套的for循环,将数组中的职工号进行比较和交换,最终实现从小到大排序。
(3)要使用折半法找出一个职工号,需要先将数组按照从小到大排序。然后定义两个指针,一个指向数组的起始位置,一个指向数组的结束位置。通过比较要找的职工号与数组中间位置的职工号的大小关系,来确定职工号所在的区间。不断缩小区间,直到找到目标职工号或者区间为空。使用while循环实现这个过程。
下面是具体的示例代码:
```c
#include <stdio.h>
void bubbleSort(int *arr, int size) {
int i, j, temp;
for(i=0; i<size-1; i++) {
for(j=0; j<size-1-i; j++) {
if(arr[j] > arr[j+1]) { // 如果前面的职工号比后面的职工号大,交换位置
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int binarySearch(int *arr, int size, int target) {
int left = 0;
int right = size - 1;
while(left <= right) {
int mid = (left + right) / 2;
if(arr[mid] == target) {
return mid;
}
else if(arr[mid] < target) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[10];
int i, target;
printf("请输入10个职工号: \n");
for(i=0; i<10; i++) {
scanf("%d", &arr[i]);
}
bubbleSort(arr, 10); // 按职工号从小到大排序
printf("请输入要查找的职工号: \n");
scanf("%d", &target);
int index = binarySearch(arr, 10, target);
if(index != -1) {
printf("职工号 %d 找到了,位于数组的第 %d 个位置\n", target, index+1);
}
else {
printf("职工号 %d 没有找到\n", target);
}
return 0;
}
```
以上代码实现了根据需要输入10个职工号,然后通过冒泡排序算法将其按照职工号从小到大进行排序。最后让用户输入一个职工号,在排序后的数组中使用折半法找到该职工号在数组中的位置。如果找到了,则输出该职工号的位置;如果没有找到,则输出未找到的提示信息。
### 回答3:
C语言实现:
```c
#include <stdio.h>
// 折半查找函数
int binarySearch(int *arr, int low, int high, int target) {
while(low <= high) {
int mid = (low + high) / 2;
if(arr[mid] == target) {
return mid;
} else if(arr[mid] > target) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1; // 如果查找失败,则返回-1
}
int main() {
int arr[10];
printf("请输入10个职工号:\n");
for(int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
}
// 对职工号从小到大进行排序
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9 - i; j++) {
if(arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
printf("排序后的职工号为:\n");
for(int i = 0; i < 10; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int target;
printf("请输入要查找的职工号:\n");
scanf("%d", &target);
// 使用折半查找函数进行查找
int result = binarySearch(arr, 0, 9, target);
if(result != -1) {
printf("职工号 %d 在数组中的位置为 %d\n", target, result);
} else {
printf("职工号 %d 不存在\n", target);
}
return 0;
}
```
程序实现的功能为:
(1) 输入10个职工号;
(2) 对职工号进行排序;
(3) 输入一个职工号,使用折半法在排序后的职工号数组中查找对应的职工号。
请注意,这个程序并没有使用指针来实现折半查找,而是使用了递归实现的折半查找函数,如果要使用指针实现,需要稍作修改。
阅读全文