tas max

silya

  • Jr. Member
  • **
    • مشاركة: 99
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: آذار 14, 2012, 04:22:24 مسائاً
slt tt
j un probleme la question c ecrie un programme qui affiche la liste des commande triee en ordre decroissant selon la quantite commande en utilise un tas max implemente avec un tableau dynamique
ana dert trie decroisante mais ma3raftache kifah ndakale le tas max arjo lifada
 
void triedecroisent(donnee *data, client *cust, jour*days) {
     int i;
     int p;
     int tampon;
 
             for (i = 1; i <= data->nbr_clients; i++)
             {  
                    for (p = i + 1; j <= data->nbr_clients ; j++)  
                        {    
                        if (cust.demande <= cust[j].demande)
                            {
                                tampon=cust.demande;
                                cust.demande=cust[j].demande;
                                cust[j].demande=tampon;
                            }
                        }
                        printf("Le client %d a la quantite suivante %d\n",i, tampon);          
             }                            
                               
             


walidou

  • Jr. Member
  • **
    • مشاركة: 65
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: آذار 14, 2012, 04:28:41 مسائاً
peux-tu expliquer c quoi un tas max??


silya

  • Jr. Member
  • **
    • مشاركة: 99
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: آذار 14, 2012, 04:47:08 مسائاً
hada wache rani nhawase chkone yfahamni


silya

  • Jr. Member
  • **
    • مشاركة: 99
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: آذار 15, 2012, 12:50:19 مسائاً
الن اجد مساعد ارجوكم


Xpert

  • Administrator
  • Hero Member
  • *****
    • مشاركة: 8312
    • مشاهدة الملف الشخصي
    • http://www.ingdz.com
    • البريد الالكتروني
رد #4 في: آذار 15, 2012, 06:29:07 مسائاً
السلام عليكم

انا في الحقيقة لا اعمل على C كثيرا
لكن ممكن احاول اشرحلك الطريقة

Un tri par tas
est un algorithme de tri par comparaisons
الترتيب بالتكديس


C'est l'algorithme le plus optimal
"
Rapide et stable"
 


Principe
Pour trier un tableau, l’idée de base de cet algorithme consiste à construire un arbre binaire (presque complet) a partir de ce tableau



 
On peut définir deux sortes de tri
 
Tas-min : chaque élément est supérieur à son parent.
 
Tas-max : chaque élément est inférieur à son parent




 
Comment construire cet arbre ?
 
(Wikipedia)
 
On cherche à obtenir un tas, c'est-à-dire un arbre binaire vérifiant les propriétés:
 
  • la      différence maximale de profondeur entre deux feuilles est de 1 (i.e.      toutes les feuilles se trouvent sur la dernière ou sur l'avant-dernière      ligne) ;
  • les      feuilles de profondeur maximale sont « tassées » sur la gauche.
  • chaque      nœud est de valeur supérieure (resp. inférieure) à celles de ses deux      fils, pour un tri ascendant (resp. descendant).

Algorithme
شفرة: [اختيار]
void entasser(int id,int *debut,int *fin){
    if (debut+id*2+1>=fin) return ;
    int idMax;
    if (debut[id]<max(debut[id*2+1],debut[id*2+2]))
        if (debut[id*2+2]>debut[id*2+1] && debut+id*2+2!=fin) idMax=id*2+2;
        else idMax=id*2+1;
    else return;
    swap(debut[id],debut[idMax]);
    entasser(idMax,debut,fin);
}

void triTas(int *debut,int *fin){
    for (int id=fin-debut-1;id>=0;id--) entasser(id,debut,fin);
    for (int id=fin-debut-1;id>=1;id--){
        swap(debut[0],debut[id]);
        entasser(0,debut,debut+id);
    }
}


Il suffit d'adapter cet algorithme a votre problème




silya

  • Jr. Member
  • **
    • مشاركة: 99
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #5 في: آذار 15, 2012, 07:01:54 مسائاً
baraka laho fika