直接插入排序

直接插入排序

概念:

把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。

举例:

直接插入排序可以形象的理解为我们玩斗地主时对牌的排序,不过它是从最大的开始比较,比如你摸了4,7,4,8四张牌,当你摸到4时,你会毫不犹豫的拿着因为你知道这不用排大小,当你摸第二张牌7时,你会放到4的后面,接着你又摸到牌4,根据直接插入排序,你会先和牌7比较,比7小,往前继续比较,和牌4一样大,牌7往后一位,把新摸的牌4插入,后面摸牌的规则都是如此,直到牌被摸完。

直接插入排序特性:

1、排序的元素集合越有序,直接插入排序的时间效率越高。
2、时间复杂度:O(N^2)
3、空间复杂度: O(1)
4、稳定性: 稳定

代码实现

//Sort.h
#include<stdio.h>
#include<stdlib.h>
void InsertSort(int* a,int n);
void PrintArray(int* a,int n);
// Sort.c
#include"Sort.h"

  void InsertSort(int* a,int n)
  {
    for(int i=0;i<n-1;i++)
    {
      int end=i;
      int temp=a[end+1];
      while(end>=0)
      {
       if(a[end]>temp)
          {
          a[end+1]=a[end];
          end--;
          }
       else
        {
         break;
         }
         a[end+1]=temp;
       }
    }
  }

void PrintArray(int* a,int n)
{
    for(int i=0;i<n;i++)
    {
      printf("%d ",a[i]);
    }
    printf("\n");
}
//Test.c
#include"Sort.h"
void TestInsertSort()
{
  int a[]={3,5,42,64,2,5};
  InsertSort(a,sizeof(a)/sizeof(int));
  PrintSort(a,sizeof(a)/sizeof(int));
}


  int main()
  {
   TestInsertSort();
   return 0;
   }
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值