Şimdi Ara

c++ heap sort sorun

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
12
Cevap
0
Favori
1.255
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Sorumu şöyle deiştireyim arkadaşlar
    elimdeki sort alogirthm integerlar için çalışıor
    bunu stringler içinde çalıştırmak istiorum

    yıldız koyduğum bölümlere nası bi şey yapabilirm ki stringler için de çalışabilir
    yani istendiği zaman stringleri , istendiği zaman integerları sor etsin
    zaten string'i sort ederse otomatik olarak integer'ı da sort edicek
    misal str1 = "56", str2="54" olduğunda bunları da kendisi zaten otm. sort etmesi lazım

    #include <iostream>
    #include <stdio.h>
    using namespace std;


    class HeapSorter
    {
    private:
    int flag,length;
    public:


    int GetLength(int A[])
    {
    flag=1;
    length=0;
    for(int i=0; flag ; i++) //start getting length of array
    {
    if(A == NULL)
    flag=0;
    else
    length++;
    } //end getting length of array

    return length;

    }




    void sort(int A[])
    {
    flag=1;
    length=0;
    for(int i=0; flag ; i++) //start getting length of array
    {
    if(A == NULL)
    flag=0;
    else
    length++;
    } //end getting length of array




    int size = length;



    // build heap in array:
    for (int i = parent(size - 1); i >= 0; i--)
    heapify(A, size, i);

    // heap sort array
    while (size > 0)
    {
    size--;
    int temp = A[0];
    A[0] = A[size]; ********************
    A[size] = temp;

    heapify(A, size, 0);
    }
    } // sort

    void heapify(int A[], int size, int index)
    {
    int biggest = index;
    int l = left(index);
    int r = right(index); ***********************

    if (l < size && A[biggest] < A[l]) biggest = l;
    if (r < size && A[biggest] < A[r]) biggest = r;

    if (biggest != index)
    {
    int temp = A[biggest];
    A[biggest] = A[index]; *******************
    A[index] = temp;
    heapify(A, size, biggest);
    }

    } // heapify

    int left(int index)
    {
    return (index * 2) + 1;
    } // left

    int right(int index)
    {
    return (index * 2) + 2;
    } // right

    int parent(int index)
    {
    return (index - 1) / 2;
    } // parent



    }; // HeapSorter



    int main(){



    int firstarray[]={10,12,14,15,16,43,1,14,56,23}; ********************
    for (int i=0;i<10;i++)
    cout<<firstarray<<" " ;

    HeapSorter halit;
    halit. sort(firstarray);

    cout<<endl;

    for(int i=0;i<halit.GetLength(firstarray);i++)
    cout<<firstarray<<" " ;



    return 0;
    }



    < Bu mesaj bu kişi tarafından değiştirildi zifirr -- 1 Kasım 2006; 21:08:24 >







  • string kullanmana izin var mi?

    string kullanarak daha kolay yapabilirsin bunu. su andaki hali ile pointerlari cok karistirmissin.
  • evet string de kullanabilirim sorun olmaz
    yardımcı olabilirsen sevinirim
  • #include <stdio.h>
    #include <iostream>
    #include <string>
    using namespace std;



    class HeapSorter{
    public:
    void Sort(string* arr) {// Heap SOrt

    int i,j;
    string temp;
    for(i=0;i<10;i++) {
    for(j=i+1;j<10;j++) {
    if(strcmp(arr.c_str(),arr[j].c_str()) >= 0 && i!=j) {
    temp=arr;
    arr=arr[j];
    arr[j]=temp;
    }
    }
    }

    } // end of function
    }; //class

    int main(){

    int i;


    string firstarray[]={"ali","veli","kulaklari","kupeli","can","methmet","c","a","d","delimisin"};

    for (i=0;i<10;i++)
    cout<<firstarray<<" " ;

    HeapSorter halit;
    halit.Sort(firstarray);

    cout<<endl;

    for(i=0;i<10;i++)
    cout<<firstarray<<" " ;

    cout<<endl;

    return 0;
    }



    < Bu mesaj bu kişi tarafından değiştirildi Ali_7 -- 1 Kasım 2006; 20:06:41 >




  • hms çok teşekür ederim ama
    sanırım bu heap sort deil
    benim soruyu heap sort ile çözmem gerek:(
  • tamam sorunun kaynaklandığı yeri buldum
    flag=1;
    length=0;
    for(int i=0; flag ; i++) //start getting length of array
    {
    if(arr == NULL)
    flag=0;
    else
    length++;
    } //end getting length of array


    burda null yerine ne kullanabilirim
    array'in bitip bitmediğini anlamak için
    array'in lenghtini öğrenmek istiorum
  • valla hicbirsey kullanamazsin gibime geliyor. main fonksiyonundan sonu belli olmayan bir pointer gonderiyorsun, ve memory bitene kadar yada baska bir programin hafizasina girmedigin surece senin kod okumaya devam edecek...

    main fonksiyonunda array uzunlugu belli, onu int olarak diger fonksiyona gonderebilirsin. STL kullanmasini biliyorsan vector<string> deneyebilirsin.
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • quote:


    int GetLength(int A[])
    {
    flag=1;
    length=0;
    for(int i=0; flag ; i++) //start getting length of array
    {
    if(A == NULL)
    flag=0;
    else
    length++;
    } //end getting length of array



    basit data turleri icin:
    length=sizeof(A)/sizeof(A[0]);
  • tamam şu an için static olarak search yapıorum
    şuraya geldim bu seferde sanırım strcmp komutlarında bi sorun var



    #include <iostream>
    #include <string>
    using namespace std;

    class Heaps{

    public:
    int sonuc;
    //sort heap
    void Sort(char* arr[],int arr_ubound)


    {
    int i,j;
    int lChild, rChild, mChild, root;
    char* temp;
    //find the root element of the current e
    // lement
    root = (arr_ubound-1)/2;
    //creating the heap
    for(j=root;j>=0;j--)


    {
    for(i=root;i>=0;i--)


    {
    lChild = (2*i)+1;
    rChild = (2*i)+2;
    if ((lChild <= arr_ubound) && (rChild <= arr_ubound))


    {
    sonuc = strcmp(arr[rChild],arr[lChild]);
    if(sonuc)
    mChild = rChild;
    else
    mChild = lChild;
    }
    else


    {
    if(rChild > arr_ubound)
    mChild = lChild;
    else
    mChild = rChild;
    }
    //swap elements

    sonuc = strcmp(arr,arr[mChild]);
    if (sonuc)


    {
    temp = arr;
    arr= arr[mChild];
    arr[mChild] = temp;
    }
    }
    }
    //move the max element to the end of the
    // array
    temp = arr[0];
    arr[0] = arr[arr_ubound];
    arr[arr_ubound]= temp;

    }
    };


    int main(){
    char * myarray[7]={"2", "3", "5","1", "16", "345", "10"};

    for(int x=0;x<7;x++)
    cout<<myarray[x]<<" ";

    cout<<endl<<endl;

    Heaps heap1;
    heap1.Sort(myarray,6);
    for(int x=0;x<7;x++)
    cout<<myarray[x]<<" ";


    return 0 ;


    }




  • 1. sonuc = strcmp(arr,arr[mChild]);

    burada arr=char*[] ama char* gerekiyor. arr[] kullanman gerekiyor

    2. temp = arr;

    yine ayni, burada char*=char*[] diyorsun.. arr[] kullanman gerekiyor

    3. arr= arr[mChild]; aynisi


    bir de sonuc=strcmp diyorsun ya, sonra da if(sonuc) diyorsun. strcmp=1 diye birsey yok. yani if(sonuc) olamaz. bunu iyi dusun.
  • bu arada, birinci mesajinda sonradan degistirdigin algoritmani ben calistiramadim...
  • abi işin içinden çıkamadım zaten bi türlü ya
    bıktım arıtk yapabilceğim bi şey yok
    altı üstü stringleri sort etcektim heap sort ile
    olmadı ama napiim artık:)
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.