示例#1
0
// 改进版快速排序,三数中值分割选取枢纽元
// 此方法来自DSAAC
static void qsort3(int data[], int left, int right) {
	if (left < right) {
		int i = partition3(data, left, right);
		qsort3(data, left, i - 1);
		qsort3(data, i + 1, right);
	}
}
示例#2
0
static bool test_sequence(Test t)
{
    bool rc = true;
    size_t n = t.size;
    Colour *a = t.data;
    Colour *d = dup_sequence(n, a);
    if (verbose)
        dump_colours("Before", a, n);
    partition3(n, d);
    if (verbose)
        dump_colours("After ", d, n);
    if (is_invalid_sequence(n, d, false))
    {
        if (!verbose)
            dump_colours("Before", a, n);
        is_invalid_sequence(n, d, true);
        if (!verbose)
            dump_colours("After ", d, n);
        if (wflag)
            write_sequence(++seqno, n, a);
        rc = false;
    }
    free(d);
    return rc;
}
示例#3
0
void quicksort3(
    const IT1& first1,
    const IT1& last1,
    const IT2& first2,
    const IT2& last2,
    const IT3& first3,
    const IT3& last3)
{
    typedef typename std::iterator_traits<IT1>::difference_type DT;
    DT DT1 = OrdinalTraits<DT>::one();
    if(last1-first1 > DT1) {
        IT1 pivot = getPivot(first1, last1);
        pivot = partition3(first1, last1, first2, last2, first3, last3, pivot);
        quicksort3(first1, pivot, first2, first2+(pivot-first1), first3, first3+(pivot-first1));
        quicksort3(pivot+1, last1, first2+(pivot-first1)+1, last2, first3+(pivot-first1)+1, last3);
    }
}
void peano::kernel::regulargrid::parallel::tests::SetupPartitionerTest::test2D_12x8() {
  #ifdef Dim2
  tarch::la::Vector<DIMENSIONS,int> domain;
  assignList(domain) = 12,9;
  peano::kernel::regulargrid::parallel::SetupPartitioner partition0(domain,8);
  peano::kernel::regulargrid::parallel::SetupPartitioner partition1(domain,9);
  peano::kernel::regulargrid::parallel::SetupPartitioner partition2(domain,10);
  peano::kernel::regulargrid::parallel::SetupPartitioner partition3(domain,11);

  validateEquals( partition0.getParallelTopology()(0), 4 );
  validateEquals( partition0.getParallelTopology()(1), 2 );
  validateEquals( partition1.getParallelTopology()(0), 3 );
  validateEquals( partition1.getParallelTopology()(1), 3 );
  validateEquals( partition2.getParallelTopology()(0), 3 );
  validateEquals( partition2.getParallelTopology()(1), 3 );
  validateEquals( partition3.getParallelTopology()(0), 3 );
  validateEquals( partition3.getParallelTopology()(1), 3 );

  tarch::la::Vector<DIMENSIONS,int> expectedSize;
  tarch::la::Vector<DIMENSIONS,int> expectedOffset;
  tarch::la::Vector<DIMENSIONS,int> subdomain;

  assignList(expectedSize) = 4,3;
  assignList(subdomain) = 0,0;
  assignList(expectedOffset) = 0,0;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );

  assignList(subdomain) = 1,0;
  assignList(expectedOffset) = 4,0;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );

  assignList(subdomain) = 2,0;
  assignList(expectedSize) = 3,3;
  assignList(expectedOffset) = 8,0;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );

  assignList(subdomain) = 0,1;
  assignList(expectedSize) = 4,3;
  assignList(expectedOffset) = 0,3;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );

  assignList(subdomain) = 1,1;
  assignList(expectedOffset) = 4,3;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );

  assignList(subdomain) = 2,1;
  assignList(expectedSize) = 3,3;
  assignList(expectedOffset) = 8,3;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );

  assignList(subdomain) = 0,2;
  assignList(expectedSize) = 4,2;
  assignList(expectedOffset) = 0,6;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );

  assignList(subdomain) = 1,2;
  assignList(expectedSize) = 4,2;
  assignList(expectedOffset) = 4,6;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );

  assignList(subdomain) = 2,2;
  assignList(expectedSize) = 3,2;
  assignList(expectedOffset) = 8,6;
  validateEquals( partition1.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition2.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition3.getSizeOfPartition(subdomain), expectedSize );
  validateEquals( partition1.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition2.getOffsetOfPartition(subdomain), expectedOffset );
  validateEquals( partition3.getOffsetOfPartition(subdomain), expectedOffset );
  #endif
}