排序详解:直接插入排序

直接插入排序,指每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。具体方法是第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。它是由两层嵌套循环组成的,外层循环标识并决定待比较的数值,内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。
这里写图片描述

简单来说,就是每次选择一个元素,将其放入有序序列中。(n-1)次操作之后,整个数组就已有序。

eg:
6 8 5 7 1 2 4 3
6|8 5 7 1 2 4 3
6 8|5 7 1 2 4 3
5 6 8|7 1 2 4 3
5 6 7 8|1 2 4 3
1 5 6 7 8|2 4 3
1 2 5 6 7 8|4 3
1 2 4 5 6 7 8|3
1 2 3 4 5 6 7 8
整个排序结束,看起来是【n-1】次操作,但是在每次插入的过程中需要从头重新遍历,实际上的应该是n*n级别的操作。

所以,直接插入排序是n*n级别时间复杂度的排序方法,隶属于插入排序,隶属于内部排序。

代码实现:

#include <stdio.h>
#include<iostream>
using namespace std;
void InsertSort(int R[], int n)
{
    int i, j;
    int temp;
    for (i = 1; i < n; ++i)
    {
        temp = R[i];
        j = i - 1;
        while (j >= 0 && R[j] > temp)
        {
            R[j + 1] = R[j];
            --j;
        }
        R[j + 1] = temp;
    }
}

int main()
{
    int a;
    int b[7] = { 22,12,16,2,11,44,55 };
    InsertSort(b, 7);
    for (a = 0; a < 7; a++)
    {
        printf("%d\n", b[a]);
    }
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值