2016-04-04 25 views
-3

Ekleme sıralama kullanarak sayıların bir listesini sipariş etmek için bir program yazıyorum ve anlamadığım bir şey var.Ekleme sıralama

int[] a = { 5, 3, 8, 2, 1 }; 

    for (int i = 0; i < 4; i++) 
    { 
     int key = a[i]; 
     int j = i +1; 
     int nextElement = a[j]; 

      if (nextElement < key) 
      { 
       swap(ref nextElement, ref key); 
      } 
      else 
      { 

      } 
    } 
    for (int i =0;i<a.Length;i++) 
    { 
     Console.WriteLine("{0}", a[i]); 
    } 
} 

static void swap(ref int x, ref int y) 
{ 
    int temp; 
    temp = x; 
    x = y; 
    y = temp; 
} 

Bu benim şimdiye kadar yazdım budur, ama aslında algoritmayı nasıl uygulanacağını anlamak sorun yaşıyorum. Önceki öğelere bakar ve onlara bir öğe mi sıralar?

+3

Kodun ekran görüntülerini yayınlamayın. Bunun yerine, kodu kopyalayın ve doğrudan gönderiye yapıştırın. İnsanların gerçekte –

+0

Fixed yanıtı vermesini istiyorsanız, sorun yaşadığınız şeyleri daha ayrıntılı olarak açıklamalısınız. Bence – Jahambo99

+0

Özellikle sorun nedir? Kodunuzun doğru yaptığı veya yapamadığı belirsizdir. – ryanyuyu

cevap

2

Sorun, a[i] ve a[j] yerine nextElement ve key değiş tokuşudur. Sizin durumunuzda nextElement için ,eşittir, ancak nextElement - a[i] değerini değiştirmezseniz, değiştirilmez.

a[i] ve a[j]'u değiştirmeniz gerekir.

if (a[i] > a[j]) {swap (ref a[i], ref a[j]); } 

Ya da sadece

void swap (int a[], int i, int j) 
{ 
    int temp = a[i]; 
    a[i] = a[j]; 
    a[j] = temp; 
} 

parametreleri olarak takas fonksiyonu almak dizisi ve endeksler takas yapmak Ve sonra

if (a[i] > a[j]) {swap (a, i, j);} 
+0

Şüphesiz, nextElement öğesini atarsam ve [i] ile [j] anahtarını atarsam önemli değil. – Jahambo99

+0

@ Ed_4434 'int' bir değer türüdür, bu yüzden nextElemet değeri bir [i]' değerine eşittir, ancak "nextElemnt" i değiştirirseniz, [i] 'değiştirilmez. – Valentin

+0

Görüyorum! Çok teşekkürler. – Jahambo99

0

dahil kullanarak numaralarını takas olabilir

int main() 
{ 
    int i=0,j=0,k=0,l=0,key=0; 
    int a[20]; 

    printf("Enter the Elements to be sorted\n"); 
    for (l=0;l<=5;l++) 
     { 

      scanf("%d", &a[l]); 
     } 
    printf("the value of l is %d", l); 
    printf("The Entered array elements are \n"); 
    for(k=0;k<l;k++) 
     { 
      printf("%d",a[k]); 
     } 


    for(j=1;j<l;j++) 
     { 
      key= a[j]; 
      i= j-1; 
      while (i>=0 & a[i]>key) 
       { 
        a[i+1] = a[i]; 
        i=i-1; 
       } 

      a[i+1]=key; 
     } 
    printf("The Sorted array is \n"); 
    for (l=0;l<6;l++) 
     { 

      printf("%d", a[l]); 
     } 

}