Пример #1
0
void lis_sort_id(LIS_INT is, LIS_INT ie, LIS_INT *i1, LIS_SCALAR *d1)
{
  LIS_INT i,j;
  LIS_INT p,t1;
  LIS_INT v;
  LIS_SCALAR s1;

  if( ie <= is ) return;

  p = (is+ie)/2;
  v = i1[p];
  lis_swap(i1[p],i1[ie],t1);
  lis_swap(d1[p],d1[ie],s1);

  i = is; j = ie;
  while(i<=j)
  {
    while(i1[i] < v) { i++; }
    while(i1[j] > v) { j--; }
    if( i<=j )
    {
      lis_swap(i1[i],i1[j],t1);
      lis_swap(d1[i],d1[j],s1);
      i++; j--;
    }
  }
  lis_sort_id(is,j ,i1,d1);
  lis_sort_id(i ,ie,i1,d1);
}
Пример #2
0
void lis_sortr_ii(LIS_INT is, LIS_INT ie, LIS_INT *i1, LIS_INT *i2)
{
  LIS_INT i,j;
  LIS_INT p,t1,t2;
  LIS_INT v;

  if( ie <= is ) return;

  p = (is+ie)/2;
  v = i1[p];
  lis_swap(i1[p],i1[ie],t1);
  lis_swap(i2[p],i2[ie],t2);

  i = is; j = ie;
  while(i<=j)
  {
    while(i1[i] > v) { i++; }
    while(i1[j] < v) { j--; }
    if( i<=j )
    {
      lis_swap(i1[i],i1[j],t1);
      lis_swap(i2[i],i2[j],t2);
      i++; j--;
    }
  }
  lis_sortr_ii(is,j ,i1,i2);
  lis_sortr_ii(i ,ie,i1,i2);
}
Пример #3
0
void lis_sort_dd(LIS_INT is, LIS_INT ie, LIS_SCALAR *d1, LIS_VECTOR *d2)
{
  LIS_INT i,j;
  LIS_INT p;
  LIS_SCALAR v;
  LIS_SCALAR s1;
  LIS_VECTOR t1;

  if( ie <= is ) return;

  p = (is+ie)/2;
  v = d1[p];
  lis_swap(d1[p],d1[ie],s1);
  lis_swap(d2[p],d2[ie],t1);

  i = is; j = ie;
  while(i<=j)
  {
    while(d1[i] < v) { i++; }
    while(d1[j] > v) { j--; }
    if( i<=j )
    {
      lis_swap(d1[i],d1[j],s1);
      lis_swap(d2[i],d2[j],t1);
      i++; j--;
    }
  }
  lis_sort_dd(is,j ,d1,d2);
  lis_sort_dd(i ,ie,d1,d2);
}
Пример #4
0
void lis_sort_id_block(LIS_INT is, LIS_INT ie, LIS_INT *i1, LIS_SCALAR *d1, LIS_INT bs)
{
  LIS_INT i,j;
  LIS_INT p,t1;
  LIS_INT v;
  LIS_SCALAR s1[9];

  if( ie <= is ) return;

  p = (is+ie)/2;
  v = i1[p];
  lis_swap(i1[p],i1[ie],t1);
  memcpy(s1,&d1[bs*p],bs*sizeof(LIS_SCALAR));
  memcpy(&d1[bs*p],&d1[bs*ie],bs*sizeof(LIS_SCALAR));
  memcpy(&d1[bs*ie],s1,bs*sizeof(LIS_SCALAR));

  i = is; j = ie;
  while(i<=j)
  {
    while(i1[i] < v) { i++; }
    while(i1[j] > v) { j--; }
    if( i<=j )
    {
      lis_swap(i1[i],i1[j],t1);
      memcpy(s1,&d1[bs*i],bs*sizeof(LIS_SCALAR));
      memcpy(&d1[bs*i],&d1[bs*j],bs*sizeof(LIS_SCALAR));
      memcpy(&d1[bs*j],s1,bs*sizeof(LIS_SCALAR));
      i++; j--;
    }
  }
  lis_sort_id_block(is,j ,i1,d1,bs);
  lis_sort_id_block(i ,ie,i1,d1,bs);
}
Пример #5
0
void lis_sort_i(int is, int ie, int *i1)
{
	int i,j;
	int p,t1;
	int v;

	if( ie <= is ) return;

	p = (is+ie)/2;
	v = i1[p];
	lis_swap(i1[p],i1[ie],t1);

	i = is; j = ie;
	while(i<=j)
	{
		while(i1[i] < v) { i++; }
		while(i1[j] > v) { j--; }
		if( i<=j )
		{
			lis_swap(i1[i],i1[j],t1);
			i++; j--;
		}
	}
	lis_sort_i(is,j ,i1);
	lis_sort_i(i ,ie,i1);
}
Пример #6
0
void lis_sort_d(int is, int ie, LIS_SCALAR *d1)
{
	int i,j;
	int p;
	LIS_SCALAR v;
	LIS_SCALAR s1;

	if( ie <= is ) return;

	p = (is+ie)/2;
	v = d1[p];
	lis_swap(d1[p],d1[ie],s1);

	i = is; j = ie;
	while(i<=j)
	{
		while(d1[i] < v) { i++; }
		while(d1[j] > v) { j--; }
		if( i<=j )
		{
			lis_swap(d1[i],d1[j],s1);
			i++; j--;
		}
	}
	lis_sort_d(is,j ,d1);
	lis_sort_d(i ,ie,d1);
}
Пример #7
0
void lis_sort_iiid(int is, int ie, int *i1, int *i2, int *i3, LIS_SCALAR *d1)
{
	int i,j;
	int p,t1,t2,t3;
	int v;
	LIS_SCALAR s1;

	if( ie <= is ) return;

	p = (is+ie)/2;
	v = i1[p];
	lis_swap(i1[p],i1[ie],t1);
	lis_swap(i2[p],i2[ie],t2);
	lis_swap(i3[p],i3[ie],t3);
	lis_swap(d1[p],d1[ie],s1);

	i = is; j = ie;
	while(i<=j)
	{
		while(i1[i] < v) { i++; }
		while(i1[j] > v) { j--; }
		if( i<=j )
		{
			lis_swap(i1[i],i1[j],t1);
			lis_swap(i2[i],i2[j],t2);
			lis_swap(i3[i],i3[j],t3);
			lis_swap(d1[i],d1[j],s1);
			i++; j--;
		}
	}
	lis_sort_iiid(is,j ,i1,i2,i3,d1);
	lis_sort_iiid(i ,ie,i1,i2,i3,d1);
}
Пример #8
0
Файл: lis.c Проект: yumetodo/lis
lis_bool lis_assign(PLIS pl, size_t count, const void *data, size_t data_size)
{
    LIS lis;
    LIS_STATUS_INIT(ret, false);

    assert(lis_valid(pl));
    lis_init(&lis);

#ifdef LIS_QUICK_BUT_RISKY
    lis_resize(&lis, count, data, data_size);
#else
    if (lis_resize(&lis, count, data, data_size))
#endif
    {
        lis_swap(&lis, pl);
        lis_destroy(&lis);
        LIS_STATUS_SET(ret, true);
    }

    assert(lis_valid(pl));
    LIS_STATUS_RETURN(ret);
} /* lis_assign */