作者在做項目時需要分析大量數據,其中需要用到最大值最小值的求解。這里分享一種簡單好用的方法,并避免在代碼中出現過多的for循環。
這個方法用到了qsort函數。
首先我們需要定義一個比較函數用來比較2個值的大小并通過返回值來表示比較的結果。
int compare(const void *a, const void *b)
{double valA = *(double *)a;double valB = *(double *)b;if(valA < valB){return -1;}else if(valA > valB){return 1;}else{return 0;}
}
然后就要用到qsort排序函數
void find_top_Nmax(double *data, int data_size, int n, double *max_values)
{int i;qsort(data, data_size, sizeof(double), compare);for(i=0; i<n&&i<data_size; ++i){max_values[i] = data[data_size - 1 - i];}
}
剛剛定義的compare函數作為回調函數使用,為qsort函數提供比較結果。在排序過后將最大值存入緩沖區。
此方法可以求最大的n個數,且代碼量少,實現簡單方便求最小值也是相同原理不在敘述。