文豪的实验5
1.(1)交换1次
(2)交换3次
第一种是直接找到最大值,与最后一项交换。第二种是把相邻两项较大值放在右边,并多次比较,从而实现最大值出现在最后。
2.
#include <stdio.h> #define N 5 int binarySearch(int x[], int n, int item); // 函数声明 int main() { int a[N] = {2, 7, 19, 45, 66}; int i, index, key; printf("数组a中的数据:\n"); for (i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); printf("输入待查找的数据项: "); scanf("%d", &key); index=binarySearch(a,N,key); // 调用函数binarySearch()在数组a中查找指定数据项key,并返回查找结果给index // 补足代码① // ××× if (index >= 0) printf("%d 在数组中,下标为%d\n", key, index); else printf("%d 不在数组中\n", key); return 0; } //函数功能描述: //使用二分查找算法在数组x中查找特定值item,数组x大小为n // 如果找到,返回其下标 // 如果没找到,返回-1 int binarySearch(int x[], int n, int item) { int low, high, mid; low = 0; high = n - 1; while (low <= high) { mid = (low + high) / 2; if (item==x[mid]) return mid; else if (item<x[mid]) high = mid - 1; else low = mid + 1; } return -1; }
3.
3.
#include <stdio.h> #include <string.h> #define N 5 void selectSort(char str[][20], int n); // 函数声明,两维数组作为函数参数 int main() { char name[][20] = {"Bob", "Bill", "Joseph", "Taylor", "George"}; int i; printf("输出初始名单:\n"); for (i = 0; i < N; i++) printf("%s\n", name[i]); selectSort(name, N); // 调用选择法对name数组中的字符串排序 printf("按字典序输出名单:\n"); for (i = 0; i < N; i++) printf("%s\n", name[i]); return 0; } // 函数定义 // 函数功能描述:使用选择法对二维数组str中的n个字符串按字典序排序 void selectSort(char str[][20], int n) { int i, j, k; char temp[20]; for (i = 0; i < n - 1; i++) { k = i; for (j = i + 1; j < n; j++) if (strcmp(str[j],str[k])<0) k = j; if (k != i) { strcpy(temp, str[k]); strcpy(str[k], str[i]); strcpy(str[i], temp); } } }
4. (1) 0x62fe1c 42
(2) 0x62fe10 0x62fe1c
(3) n的值
5.(1)可以
(2)可以