插入排序——C语言

#include 
#include 

void mergeSort(int *arr, int len)
{
  for (int j = 1; j < len; j++)
  {
    int key = arr[j];
    int i = j - 1;
    while (i >= 0 && arr[i] > key)
    {
      arr[i + 1] = arr[i];
      i--;
    }
    arr[i + 1] = key;
  }
}

int main(void)
{
  int len = 20;
  int *arr = (int *)malloc(len * sizeof(int));
  for (int k = 0; k < 20; k++)
  {
    arr[k] = rand();
  }
  mergeSort(arr, len);
  for (int i = 0; i < len; i++)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");

  return 0;
}

插入排序的思路很简单:首先数组首元素是有序的,可作为有序数组,j=1开始的所有元素都是无序的,作为无序数组。然后循环无序数组,每次取arr[j]去和有序数组的所有元素进行比较。有序数组最后一个元素下标设为i,则i = j - 1。第一次变量无序数组时,j = 1,i = 0,符合预期的i指向有序数组最后一个元素。

未完待续。。。

你可能感兴趣的:(算法,c,排序)