コード例 #1
0
ファイル: cmp_sort.cpp プロジェクト: qzmfranklin/zmake
	double test(const int type, const int n) {
		assert(status==1);
		TimeStat clk(n);
		for (int j = 0; j < n; j++) {
			for (int i = 0; i < num; i++)
				data[i]=bk[i];
			switch ((enum SORT_TYPE)type) {
			case HEAP2:
				clk.tic();
				heapsort2(num,data);
				clk.toc();
				break;
			case HEAP3:
				clk.tic();
				heapsort3(num,data);
				clk.toc();
				break;
			case HEAP4:
				clk.tic();
				heapsort4(num,data);
				clk.toc();
				break;
			//case MERGE:
				//clk.tic();
				//mergesort(num,data);
				//clk.toc();
				//break;
			case QUICK:
				clk.tic();
				quicksort(num,data);
				clk.toc();
				break;
			case QUICKNR:
				clk.tic();
				quicksort_nr(num,data);
				clk.toc();
				break;
			case QSORT:
				clk.tic();
				qsort(data,num,sizeof(int),compare);
				clk.toc();
				break;
			case STDSORT:
				clk.tic();
				::std::sort(data,data+num);
				clk.toc();
				break;
			default:
				break;
			}
		}
		return clk.median();
	}
コード例 #2
0
ファイル: sub_stat.c プロジェクト: eterps/pwrake
float floatweightedmedian(int ndat, float *dat, float *weight)
{
  int i;
  float sw,mw;
  float *a,*w,med;

  if(ndat==1) return dat[0];

  if((a=(float*)malloc(sizeof(float)*ndat))==NULL)
    {
      fprintf(stderr,"Cannot allocate a in floatweightedmedian, ndat=%d\n",
	      ndat);
      exit(-1);
    }
  if((w=(float*)malloc(sizeof(float)*ndat))==NULL)
    {
      fprintf(stderr,"Cannot allocate w in floatweightedmedian, ndat=%d\n",
	      ndat);
      exit(-1);
    }

  memcpy(a,dat,sizeof(float)*ndat);
  memcpy(w,weight,sizeof(float)*ndat);

  /* sort */
  heapsort2(ndat,a,w); /* sorted by dat */
  sw=0;
  for(i=0;i<ndat;i++) sw+=w[i];
  mw=0.5*sw;

  sw=0;
  med=0;
  for(i=0;i<ndat;i++)
    {
      sw+=w[i];
      if(sw>mw)
	{
	  med=a[i];
	  break;
	}
      else if(sw==mw)
	{
	  med=0.5*(a[i]+a[i+1]);
	  break;
	}
    }  
  free(a);
  free(w);
  return med; /* error!! */
}