Пример #1
0
void RadixSort(SLList &L)//基数排序
{
 int i;
    ArrType f,e;//队头指针,队尾                                                                                                                                                                                                                                                       
 for(i=0;i<L.keynum;i++)//进行keynum趟分配,收集
 {
  Distribute(L,i,f,e);//第i趟分配
  Collect(L,i,f,e);//第i趟分收集
 }
}
Пример #2
0
void RadixSort(SList *L)
	/*对L进行基数排序,使得L成为按关键字非递减的静态链表,L.r[0]为头结点*/
{ 
	int i;
	addr f,r;
	for(i=0;i<(*L).keynum;i++)			/*由低位到高位依次对各关键字进行分配和收集*/
	{				
		Distribute((*L).data,i,f,r);	/*第i趟分配*/
		Collect((*L).data,f,r);			/*第i趟收集*/
		printf("第%d趟收集后:",i+1);
		PrintList2(*L);
	}
}
Пример #3
0
void RadixSort(SLList *L)
{  int i;
   ArrType f,e;

   for(i=0;i<L->recnum;i++)
   L->r[i].next=i+1;
   L->r[L->recnum].next=0;

   for(i=0;i<L->keynum;i++)
   {   Distribute(L,i,f,e);
       Collect(L,i,f,e);
   }/*end of for */
}/*end of RadixSort() function*/
Пример #4
0
void RadixSort(SLList &L) {  // 算法10.17
    // L是采用静态链表表示的顺序表。
    // 对L作基数排序,使得L成为按关键字自小到大的有序静态链表,
    // L.r[0]为头结点。
    int i;
    ArrType f, e;
    for (i=1; i<L.recnum; ++i) L.r[i-1].next = i;
    L.r[L.recnum].next = 0;     // 将L改造为静态链表
    for (i=0; i<L.keynum; ++i) {
        // 按最低位优先依次对各关键字进行分配和收集
        Distribute(L, i, f, e);    // 第i趟分配
        Collect(L, i, f, e);       // 第i趟收集
        print_SLList2(L, i);
    }
} // RadixSort
Пример #5
0
void HeaderCtrl::RefreshDistribution()
{
	int szcx = GetSize().cx;
	if(oszcx != szcx) {
		if(mode == SCROLL)
			for(int i = 0; i < col.GetCount(); i++) {
				Column& c = col[i];
				c.ratio = minmax((int)c.ratio, c.min, c.max);
			}
		else {
			Distribute(GetVisibleCi(0), 0);
		}
		oszcx = szcx;
		ReCompute();
	}
}
Пример #6
0
 static void RadixSort(SLList &L)
 { // L是采用静态链表表示的顺序表。对L作基数排序,使得L成为按关键字
   // 自小到大的有序静态链表,L.r[0]为头结点。算法10.17
   int i;
   ArrType f,e;
   for(i=0;i<L.recnum;++i)
     L.r[i].next=i+1;
   L.r[L.recnum].next=0; // 将L改造为静态链表
   for(i=0;i<L.keynum;++i)
   { // 按最低位优先依次对各关键字进行分配和收集
     Distribute(L.r,i,f,e); // 第i趟分配
     Collect(L.r,f,e); // 第i趟收集
     printf("第%d趟收集后:\n",i+1);
     printl(L);
     printf("\n");
   }
 }
Пример #7
0
void HeaderCtrl::SetTabWidth0(int i, int cx)
{
	Column& c = col[i];
	int szcx = GetSize().cx;
	Rect ir = GetTabRect(i);
	bool checkmin = SumMin(0) < szcx;
	cx = checkmin ? minmax(cx, c.min, c.max) : min(cx, c.max);
	if(mode != SCROLL) {
		if(checkmin)
			cx = min(cx, szcx - SumMin(i + 1) - ir.left);
		cx = max(cx, szcx - SumMax(i + 1) - ir.left);
	}
	if(cx < 0)
		cx = 0;

	double rs = Denominator();
	int ocx = ir.Width();
	if(szcx == 0) return;

	double delta = rs * (cx - ocx) / szcx;
	if(ocx == cx) return;
	col[i].ratio += delta;

	switch(mode) {
	case PROPORTIONAL:
		Distribute(GetVisibleCi(i + 1), -delta);
		break;
	case REDUCELAST:
		for(int q = col.GetCount() - 1; q >= i; q--)
			Reduce(q, delta, rs, szcx, checkmin);
		break;
	case REDUCENEXT:
		for(int q = i + 1; q < col.GetCount(); q++)
			Reduce(q, delta, rs, szcx, checkmin);
		if(delta > 0)
			Reduce(i, delta, rs, szcx, checkmin);
		break;
	case SCROLL:
		col[i].ratio = cx;
		SbTotal();
		break;
	}

	ReCompute();
	Refresh();
}
Пример #8
0
 void RadixSort(SLList *L)
 { /* L是采用静态链表表示的顺序表。对L作基数排序,使得L成为按关键字 */
   /* 自小到大的有序静态链表,L.r[0]为头结点。算法10.17 */
   int i;
   ArrType f,e;
   for(i=0;i<(*L).recnum;++i)
     (*L).r[i].next=i+1;
   (*L).r[(*L).recnum].next=0; /* 将L改造为静态链表 */
   for(i=0;i<(*L).keynum;++i)
   { /* 按最低位优先依次对各关键字进行分配和收集 */
     Distribute((*L).r,i,f,e); /* 第i趟分配 */
     Collect((*L).r,f,e); /* 第i趟收集 */
     printf("第%d趟收集后:\n",i+1);
     printl(*L);
     printf("\n");
   }
 }
void plDistribComponent_old::Preview()
{
    if( !NumTargets() )
        return;

    GetCOREInterface()->DisableSceneRedraw();

    plDistribInstTab replicants;

    plExportProgressBar bar;
    bar.Start("Preview", NumTargets() << 4);

    plDistTree distTree;
    Distribute(replicants, bar, &distTree);

    IMakeOne(replicants);

    Done();

    GetCOREInterface()->EnableSceneRedraw();
    GetCOREInterface()->ForceCompleteRedraw(FALSE);
}
Пример #10
0
void Radixsort() {
	/*对R[0...n-1]进行基数排序,R[i].key为非负整数,且位数不超过KeySize*/
	int i,k;
	for (i=0; i<Radix; i++)
		InitQueue(i);
	for (i=KeySize-1; i>=0; i--) {
		Distribute(i);
		Collect(B);
		if ((KeySize-i)==m) {
			printf("第%d趟的结果是:",m);
			for(k=0; k<n; k++)
				printf("%5d",R[k].key);
			printf("\n");
			printf("请输入还要输出第几趟结果,不想输出时请输入0:");
			scanf("\n%d",&m);
		}
	}
	printf("最终排序结果是:");
	for (k=0; k<n; k++)
		printf("%5d",R[k].key);
	printf("\n");
}/*Radixsort*/
Пример #11
0
// ragged right でフォーマットされた行を両端揃えにする。
void JustifyLine(VisualLine *line, const PageInfo *page)
{
    Token *trailing_space_start; // 仮想の行末。残りの空白は右マージンに被せる。

    trailing_space_start = EffectiveLineEnd(line);

    // この行に空白しか無い場合は何もしない。
    if (trailing_space_start == line->tokens)
	return;

    int nspaces = 0;
    for (Token *tok = line->tokens; tok < trailing_space_start; tok++)
	if (tok->chars[0].utf8[0] == ' ')
	    nspaces++;

    // 空白トークンが無いので、その幅も調整できない。
    if (nspaces == 0)
	goto Tracking;

    // 最後の空白でないトークン。
    Token *last_token = trailing_space_start - 1;
    short right_edge = last_token->x + last_token->width;
    // printf("%hd vs %hd\n", PageInfoGetVisibleWidth(page), right_edge);
    // assert(PageInfoGetVisibleWidth(page) >= right_edge);
    if (PageInfoGetVisibleWidth(page) <= right_edge)
	goto Tracking;

    // それぞれの空白トークンについて、増やすべき幅を計算する。
    int *addends = alloca(nspaces * sizeof(int));
    short shortage = PageInfoGetVisibleWidth(page) - right_edge;
    Distribute(shortage, nspaces, addends);

    // ぶらさがっていない空白トークンに幅を分配する。
    int i = 0;
    int SPACE_STRETCH_LIMIT = YFontTextWidth(font, " ", 1) * 3;
    for (Token *tok = line->tokens; tok != trailing_space_start; tok++) {
	if (TokenIsSpace(tok)) {
	    int addend = (addends[i] > SPACE_STRETCH_LIMIT) ? SPACE_STRETCH_LIMIT : addends[i];

	    tok->width += addend;
	    i++;
	}
    }

    UpdateTokenPositions(line);

 Tracking:
    last_token = trailing_space_start - 1;
    right_edge = last_token->x + last_token->width;
    shortage = PageInfoGetVisibleWidth(page) - right_edge;
    size_t ntokens = trailing_space_start - line->tokens - 1;

    if (ntokens == 0) {
	// 最初のトークンが最後の可視トークンである場合。
	return;
    }

    short MAX_TRACK_DELTA = (short) (YFontEm(font) / 8.0);

    if (shortage == 0) {
	return;
    } if (shortage > 0) {
	int addends[ntokens];
	Distribute(shortage, ntokens, addends);

	for (int i = 0; i < ntokens; i++) {
	    line->tokens[i].width += addends[i] > MAX_TRACK_DELTA ? MAX_TRACK_DELTA : addends[i];
	}
    } else {
	short excess = -shortage;
	int subtrahends[ntokens];
	Distribute(excess, ntokens, subtrahends);

	for (int i = 0; i < ntokens; i++) {
	    line->tokens[i].width -= subtrahends[i] > MAX_TRACK_DELTA ? MAX_TRACK_DELTA : subtrahends[i];
	}
    }
    UpdateTokenPositions(line);
}
Пример #12
0
ParGridFunction::ParGridFunction(ParFiniteElementSpace *pf, HypreParVector *tv)
   : GridFunction(pf), pfes(pf)
{
   Distribute(tv);
}