[redis] linux下叢集篇(4) docker部署
阿新 • • 發佈:2020-08-28
寫幾個函式:
①輸人10個職工的姓名和職工號;
②按職工號由小到大順序排序,姓名順序也隨之調整;
③要求輸人一個職工號,用折半查詢法找出該職工的姓名,從主函式輸人要查詢的職工號,輸出該職工姓名。
題目解析:
利用二分查詢的關鍵在於資料一定要先有序,所以在查詢前我們需要對資料進行排序。
程式碼示例:
#include<stdio.h> #define N 10 void input(int num[], char name[N][8]) { int i; for (i = 0; i < N; i++) { printf("input NO.: "); scanf("%d", &num[i]); printf("input name: "); getchar(); gets(name[i]); } } void sort(int num[], char name[N][8]) { int i, j, min, templ; char temp2[8]; for (i = 0; i < N - 1; i++) { min = i; for (j = i; j<N; j++) if (num[min]>num[j]) min = j; templ = num[i]; strcpy(temp2, name[i]); num[i] = num[min]; strcpy(name[i], name[min]); num[min] = templ; strcpy(name[min], temp2); } printf("\n result:\n"); for (i = 0; i < N; i++) printf("\n %5d%10s", num[i], name[i]); } void search(int n, int num[], char name[N][8]) { int top, bott, mid, loca, sign; top = 0; bott = N - 1; loca = 0; sign = 1; if ((n<num[0]) || (n>num[N - 1])) loca = -1; while ((sign == 1) && (top <= bott)) { mid = (bott + top) / 2; if (n == num[mid]) { loca = mid; printf("NO. %d , his name is %s.\n", n, name[loca]); sign = -1; } else if (n < num[mid]) bott = mid - 1; else top = mid + 1; } if (sign == 1 || loca == -1) printf("%d not been found.\n", n); } int main() { int num[N], number, flag = 1, c; char name[N][8]; input(num, name); sort(num, name); while (flag == 1) { printf("\ninput number to look for:"); scanf("%d", &number); search(number, num, name); printf("continue ot not(Y/N)?"); getchar(); c = getchar(); if (c == 'N' || c == 'n') flag = 0; } return 0; }