Qualcommコードでのバブルソート

Redditで fj333ユーザーが今日共有した面白い検索結果。 1年前に登場したQualcomm Technologies for Androidのプロプライエタリコードを理解すると、彼は未知のプログラマーが生産コードでバブルソートを使用して、配列の最大値を見つけることにしたことを発見しました。



ソースファイルはGithubへのリンクまたは猫の下で表示できます。Androidを実行しているQualcomm Snapdragon 200 MSM8610を搭載したデバイスの所有者は、作業中にそれを評価できます。



ソートアルゴリズムに精通している人なら誰でも知っているように、バブルソートは教育的なアルゴリズムであり、 非効率的であるため、通常産業用コードでは使用されません。 実際には、最悪の場合や平均的な場合、 O(n 2 )の複雑さを持ち、さらに、この場合の容量の複雑さはO(n)です。 誰納得できませんでした- バラクオバマでさえ 、バブルソートの使用を推奨していません



そして、これはすべて、単純な検索で最大値を見つけるのに十分だったという事実を考慮していない。



#ifndef ABS #define ABS(x) (((x) < 0) ? -(x) : (x)) #endif /*============================================================================== * Function: bubblesort * * Description: Subroutine for sorting 1-D array elements * * Parameters: double *x ---> input one-dimensional array * int n ---> size of input array * int *m ---> indices of sorted elements *============================================================================*/ void bubblesort(double *x, int n, int *m) { int i, j, t1; double t2; for(i = 0; i < n; i++) m[i] = i; for(i = 0; i < n; i++) { for(j = 0; j <n-1; j++) { if(x[j] < x[j+1]) { t2 = x[j+1]; x[j+1] = x[j]; x[j] = t2; t1 = m[j+1]; m[j+1] = m[j]; m[j] = t1; } } } } /* bubblesort */ /*============================================================================== * Function: absmax * * Description: * * Parameters: double *x ---> input one-dimensional array * int n ---> size of input array *============================================================================*/ double absmax(double *x, int n) { int j, *l; int index = 0; double *y; l = (int *)malloc(n * sizeof(int)); if (NULL == l) { CDBG("%s: Error mem alloc for l.\n", __func__); return -1; } y = (double *)malloc(n * sizeof(double)); if (NULL == y) { free(l); CDBG("%s: Error mem alloc for y.\n", __func__); return -1; } for(j = 0; j < n; j++) y[j] = ABS(x[j]); bubblesort(y, n, l); index = l[0]; free(l); free(y); return ABS(x[index]); }
      
      





コードレビューは実施されましたか? 話はこれについて沈黙しています...



All Articles