|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
左边是英文,右边是外语,需要将外语转化成英语,如果没有则输出eh。这里用了二分查找。但我好像在快速排序中出了错误,不知道是不是?大佬帮我看看,然后下面注释的代码是二分查找
输入
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
jifsai
oopslay
输出
cat
eh
loops
- #include<stdio.h>
- #include<string.h>
- struct Entry {
- char english[11];
- char foreign[11];
- }entries[100005];
- void QuickSort(struct Entry *p, int s, int t) { // 外语按顺序排序
- int l = s, r = t;
- struct Entry tmp;
- if (s < t) {
- tmp = p[s];
- while (l != r) {
- while (r > l && p[r].foreign >= tmp.foreign)
- r--;
- p[l] = p[r];
- while (l < r && p[l].foreign <= tmp.foreign)
- l++;
- p[r] = p[l];
- }
- p[l] = tmp;
- QuickSort(p, s, l - 1);
- QuickSort(p, l + 1, t);
- }
- }
- int main() {
- int num = 0;
- char word[11], ch;
- while (1) { // 输入
- scanf("%s%s", &entries[num].english, &entries[num].foreign);
- num++;
- getchar();
- ch = getchar();
- ungetc(ch, stdin);
- if (ch == '\n')
- break;
- }
- QuickSort(entries, 0, num - 1); // 快速排序
-
- // 这个是查看快速排序的结果
- int i;
- for (i = 0; i < num; i++) {
- printf("%s %s\n", entries[i].english, entries[i].foreign);
- }
- // 二分查找找出外语对应的英语
- //while (scanf("%s", word) != EOF) {
- // int left = 0, right = num - 1;
- // int n = 0;
- // while (left <= right) {
- // int mid = left + (right - left) / 2;
- // n = strcmp(entries[mid].foreign, word); // 比较
- // if (n < 0) {
- // left = mid + 1;
- // }
- // else if (n > 0) {
- // right = mid - 1;
- // }
- // else {
- // printf("%s\n", entries[mid].english);
- // break;
- // }
- // }
- // if (n) {
- // printf("eh\n");
- // }
- //}
- return 0;
- }
复制代码 |
|