※ 引述《Neisseria (Neisseria)》之铭言:
: 不预先将阵列排序的话,大概就是 O(n)
: 以下提供一个 C 的版本:
: #include <assert.h>
: #include <stddef.h>
: // Yet another linear search.
: #define max(sz, arr, out) do { \
: if (sz <= 1) { \
: out = arr[0]; \
: break; \
: } \
: out = arr[0]; \
: size_t i; \
: for (i = 1; i < sz; i++) { \
: out = arr[i] > out ? arr[i] : out; \
: } \
: } while (0);
: int main(void) {
: int arr_i[] = {4, 2, 5, 1, 3};
: int max_i;
: max(5, arr_i, max_i);
: assert(max_i == 5);
: float arr_f[] = {2.2, 3.3, 1.1, 5.5, 4.4};
: float max_f;
: max(5, arr_f, max_f);
: assert(max_f == 5.5);
: return 0;
: }
: 这是写好玩的,考试不要这样写,这样只是在搞自己
: 有写过一些 C 的就知道原因
看了大大的程式码才想到有可能会遇到小数。
所以修改了自己之前写的程式码,改完如下:
#include <stdio.h>
#include <stdlib.h>
float max(char**, int);
int main(int argc, char* argv[]){
printf("%f\n", max(argv+1, argc-1));
return 0;
}
float max(char** ap, int limit){
if (limit == 1) return atof(*ap) ;
float tmp;
return atof(*ap) > (tmp = max(ap+1, limit-1)) ? atof(*ap) : tmp;
}