插入排序

Insertion sorting

我正在编写一个程序来使用插入排序对数字列表进行排序,但有些事情我不明白。

    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;
 }

这是我到目前为止所写的内容,但我在实际理解如何实现该算法时遇到了困难。它只是查看前面的元素并将元素排序到它们中吗?

问题是您正在交换 nextElementkey 而不是 a[i]a[j]Intvalue type,在您的情况下 nextElement 等于 a[i],但如果您更改 nextElement - a[i] 值将不会更改.

所以你需要交换 a[i]a[j]

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

或者让交换函数以数组和索引作为参数进行交换

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

然后您可以使用

交换号码
if (a[i] > a[j]) {swap (a, i, j);}

包括

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]);
      }

}