C dilinde büyükten küçüğe doğru sıralama

nikoisbackx

Hectopat
Katılım
11 Aralık 2019
Mesajlar
109
Yer
Sakarya
Daha fazla  
Cinsiyet
Erkek
Meslek
Web & Mobile Developer
Merhabalar, metin belgesinde bir harfin kaç defa geçtiğini bulup çoktan aza doğru sıralamak istiyorum. Hangi harfin kaç defa geçtiğini buldum ancak çoktan aza doğru sıralayamadım. Yardımcı olur musunuz lütfen?

C:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(int argc, char *argv[]) {
    FILE *fp;
    int c = 0, say[25] = {0},stx,i=0,j;
    char metin[2000],*str[2000];
    for(i=0;i<26;i++)
        say[i]=0;
    char dosyaAdi[25];
    printf("\n\n\n\n\n\n\n\t\t\t\t\tDosya ismini giriniz:");
    scanf("%s",&dosyaAdi);
    system("cls");
    if(fp!=NULL){//dosya var olup olmadıgını kontrol eder
        fp=fopen(dosyaAdi,"r");
        while(!feof(fp)){
            metin[c]=fgetc(fp);
            while (metin[c] != '\0'){//harfleri kontrol eder ve sayilarını yazdırır.
                if (metin[c] >= 'a' && metin[c] <= 'z'){
                      say[metin[c]-'a']++;
               }
               c++;
            }  
       }
    }
    else{
        printf("Dosya adi hatalı:");
    }
    printf("Harf sayilari");
    printf("\n\t\tSiralama:\n");
    for(i=0;i<26;i++){
        metin[i]=i+'a';
    }
    for(i=0;i<26;i++){//hangi harfeten kaç tane oldunu yazıyor
        if (say[i] != 0)
            printf("%c=%d\n",metin[i],say[i]);
       }
    return 0;
}
 
Sıralama algoritmalarını araştırın. Yazma zorluğu ve zaman karmaşıklığına göre farklı algoritmalar mevcut. C üzerinde yazılması bakından biraz karmaşık olsa bile hızlı oldukları için Quick ve Merge Sort; Basit mantıkları sayesinde yazımı biraz daha kolay olan Selection, Insertion veya çok da verimli olmasa bile Bubble Sort algoritmalarını yazabilirsiniz.
 
qsort öğrenmek için iyi fırsat.
C:
typedef struct {
    int adet;
    char harf;
} kutu;
kutu liste[26];

int compare (const void * k1, const void * k2){
  kutu *kutuA = (kutu *)k1;
  kutu *kutuB = (kutu *)k2;
  return (kutuB->adet - kutuA->adet);
}


print ettiğiniz yerde aşağıdaki gibi liste dizisinin içlerini doldurun
C:
liste[i].adet = say[i];
liste[i].harf = metin[i];


en aşağıda qsort işlemi sonrası bir daha print edin
C:
    qsort (liste, 26, sizeof(kutu), compare);
    
    for(i=0;i<26;i++){
        if (liste[i].adet != 0)
            printf("%c=%d\n",liste[i].harf, liste[i].adet);
    }
 

Geri
Yukarı