插入排序

一:插入排序

1.1直接插入排序(Straight Insertion Sort)

  1. 理解:就是将后面的数,与前面的数依次比较,找到合适的位置,直接插入;

  2. 基本思想:

    把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。

  3. 时间复杂度是 O ( N 2 ) O(N^2) O(N2);

  4. 直接插入排序稳定性
    直接插入排序是稳定的算法,它满足稳定算法的定义。
    算法稳定性 – 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!

/*直接插入排序
  按照小的在前,大的在后
*/
void straight_insertion_sort(int *a, const int& length)
{
  int i = 0, j = 0, k = 0;
  int temp = 0;
  for (i = 1; i < length; ++i)
  {
    for (j = 0; j < i; ++j)
    {
      if (a[i] < a[j])
      {
        break;
      }
    }
    if (j != i)
    {
      temp = a[i];
      for (k = i; k > j; --k)
      {
        a[k] = a[k - 1];
      }
      a[k] = temp;
    }
  }
  return;
}

int main()
{
  int a[6] = { 20,19,18,17,16 ,15 };
  int b[6] = { 20,30,40,10,60 ,50 };
  straight_insertion_sort(b, 6);
  for (int i : a) {
    cout << i << endl;
  }

  return 0;
}

参考链接: https://www.cnblogs.com/skywang12345/p/3596881.html

1.2:希尔排序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值