• 18-02-2020, 16:11:18
    #10
    Mf.Rub adlı üyeden alıntı: mesajı görüntüle
    Çift sayıları döndürmeye gerek yok ki. Tekleri başa atayınca zaten çiftler sona eklenmiş olacak



    insert methodunu henüz bilmiyorum. Benim amacım başka methodlar kullanarak yapmak değil Yazdığım koddaki mantık hatasını bulmak ve düzeltmek
    append ile insert in farkı append sonuna direk ekleme yapıyor.

    İnsert methodu ise hocam kaçıncı indise eklemek istersen onu belirtiyorsun ve ekleme yapıyor. Benim yukarıda anlatmak istediğim ise tek olan sayıları 0 dan başlatıp ilerletmek çift olan sayıları ise dizinin boyutundan geriye eklemesini sağlamak
  • 18-02-2020, 18:43:37
    #11
    EmAy adlı üyeden alıntı: mesajı görüntüle
    append ile insert in farkı append sonuna direk ekleme yapıyor.

    İnsert methodu ise hocam kaçıncı indise eklemek istersen onu belirtiyorsun ve ekleme yapıyor. Benim yukarıda anlatmak istediğim ise tek olan sayıları 0 dan başlatıp ilerletmek çift olan sayıları ise dizinin boyutundan geriye eklemesini sağlamak
    Teşekkür ederim fakat dediğim gibi ben bu kod içerisinde çözmek istiyorum
  • 18-02-2020, 19:07:00
    #12
    Mf.Rub adlı üyeden alıntı: mesajı görüntüle
    Teşekkür ederim fakat dediğim gibi ben bu kod içerisinde çözmek istiyorum
    Arkadaşın yazdığını ufak bir düzelterek, else girdiği zaman sayıdan sayıya atama yaparak işlem yapabilirsin hocam insert olmasına gerek yok Java üzerinde daha önce fazla çalışmadım ondan dolayı tam anlamıyla bir yorum yapamıyorum.

    public class TeklerBasta{
    public static void main(String args[]) throws Exception
    {
    int a [] = {4,8,3,1,18,9,21,20,5,17};
    int size, i, p, temp;
    size = 10;
    p = 0;
    //Tekler için diziyi dönüyoruz
    for(i = 0; i<size; i= i+1) {
    if(a[i] % 2 != 0)
    {
    temp = a[i];
    a[i] = a[p];
    a[p] = temp;
    p = p+1;
    System.out.println(temp);
    }
    else
    {
    temp = a[i];
    a[i] = a[size];
    a[size] = temp;
    size = size-1;
    System.out.println(temp);
    }
    }

    }
    // A dizisindeki tekleri başa, çiftleri sona yazan program.
    }
    }
  • 18-02-2020, 21:14:19
    #13
    Problemi buldum.

    System.out.println(a[i]); bu koddan önce for döngüsüne sokmadığım için haliyle program çalışmamış

    Kodun doğrusu

    class TeklerBasta{
    public static void main(String args[]) throws Exception {
    
        int a [] = {4,8,3,1,18,9,21,20,5,17};
        int size, i, p, temp;
        size = 10;
        p = 0;
    
        for(i = 0; i<size; i= i+1)
    
        if(a[i]%2 != 0){
        temp = a[i];
        a[i] = a[p];
        a[p] = temp;
        p = p+1;
        }
        for(i = 0; i<size; i= i+1)
        System.out.println(a[i]);
        
        
        
        
    // A dizisindeki tekleri başa, çiftleri sona yazan program.
        
        
    }
    }
  • 07-04-2020, 20:25:20
    #14
    Verinin dizideki yerlerini değiştirmeye çalışmak biraz durumu karmaşıklaştırmış. Onun yerine geçici bir dizi oluşturup bu diziyi istediğin gibi doldurmak olayı daha basit tutacaktır.
    Algoritmayı ve kodu açıklamaya çalıştım, senin hazırladığın kodu düzenleyerek ilerledim.

    Algoritma:
    Input'un ile aynı boyutta geçici, boş bir dizi oluştur.
    İki tane index değeri tanımla, bir tanesi dizinin başından ilerleyecek, diğeri ise sonundan.
    Input'unu baştan sona sırayla oku.
    • Gelen veri tek ise geçici oluşturduğun dizinin başını gösteren index'ine yaz ve bu indexi tutan değeri bir arttır.
    • Gelen veri çift ise geçici oluşturduğun dizinin sonunu gösteren index'ine yaz ve bu indexi tutan değeri bir azalt.
    Geçici diziyi oluşturduktan sonra baştaki diziye ya da baştaki halini de tutman gerekiyorsa istediğin herhangi bir yere atayabilirsin.

    Kod:
    public static void main(String args[]) throws Exception {
    
      int a [] = {4,8,3,1,18,9,21,20,5,17};
      int i;
      int size = a.length;
    
      int out[] = new int[size];
    
      int leftIndex = 0; //Arrayin başını tutan index
      int rightIndex = size-1; //Arrayin sonunu tutan index
    
      for(i = 0; i<size; i = i+1)
      {
        if(a[i] % 2 != 0){ //Tek ise
          out[leftIndex] = a[i]; //Array'de başa yaz
          leftIndex++; //Array'in başını tutan indexi yükselt
        }
        else{ //Çift ise
          out[rightIndex] = a[i]; //Array'de sona yaz
          rightIndex--; //Array'in sonunu tutan indexi düşür
        }
      }
    
      a = out; //Sonucu ata.
    
      //Sonucu yazdır
      for(i = 0; i<size; i++)
        System.out.println("a["+i+"] = " + a[i]);
    }
    Umarım yardımcı olabilmişimdir.
  • 08-04-2020, 20:13:00
    #15
    Hic kasmaya gerek yok. Custom sort ile nLogN de cozulur, memory complexity O( n ) olur in-place sort yapilirsa. Performans super onemliyse O ( n ) le de cozulebilir tek iterasyonda.
    public static void main(String[] args) {  Integer[] nums = new Integer[]{15, 10, 1, 5, 7, 8, 54, 32, 67, 89, 4, 7, 9, 12, 44};  Arrays.sort(nums, (i1, i2) -> {    if (i1 % 2 == 0 && i2 % 2 == 0) {      return 0;    }    return i1 % 2 == 0 ? -1 : 1;  });   }
    Edit ( Aciklama ): Custom comparator ile cift sayilara oncelik verirsin.