算法-插入排序之直接插入排序

原创 2015年11月18日 16:02:28

插入排序的基本思想:

每次将要排序的关键字按照其大小插入已排序的子表合适的位置,直到全部元素插入完成。

 

直接插入排序:所有数据被存放在R[0,n-1]中,在进行排序的过程中将R划分为有序区和无序区两部分,每次从无序区取出一关键字放在有序区合适的位置,有序区的数字排列一直是有序的由大到小或者由小到大。

//文件名:exp10-1.cpp
#include <stdio.h>
#define MAXE 20            //线性表中最多元素个数
typedef int KeyType;
typedef char InfoType[10];
typedef struct           //记录类型
{   
    KeyType key;           //关键字项
    InfoType data;         //其他数据项,类型为InfoType
} RecType;
//直接插入排序
void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序
{
    int i,j,k;
    RecType temp;
    for (i=1;i<n;i++)
    {
        temp=R[i];//待插入的关键字
        j=i-1;               //从右向左在有序区R[0..i-1]中找R[i]的插入位置,
        //R[i]左侧是有序区通过下面的while完成从右到左的一一比较找到合适的插入位置
        while (j>=0 && temp.key<R[j].key) //通过while找到要插入关键字的合适的位置
        {     /*j用来记录有序区多少元素还未比较
            */
            R[j+1]=R[j];    //将关键字大于R[i].key的记录后移
            j--;
        }
        R[j+1]=temp;            //在j+1处插入R[i],在恰当的位置插入待插入的关键字
        printf("i=%d,",i);        //输出每一趟的排序结果
        printf("插入%d,结果为: ",temp);
        for (k=0;k<n;k++)
            printf("%3d",R[k].key);
        printf("\n");
    }
}
void main()
{
    int i,k,n=10;
    KeyType a[]={9,8,7,6,5,4,3,2,1,0};
    RecType R[MAXE];
    for (i=0;i<n;i++)
        R[i].key=a[i];
    printf("初始关键字: ");        //输出初始关键字序列
    for (k=0;k<n;k++)
        printf("%3d",R[k].key);
    printf("\n");
    //InsertSort(R,n);
    InsertSort(R,n);
    printf("最后结果: ");        //输出初始关键字序列
    for (k=0;k<n;k++)
        printf("%3d",R[k].key);
    printf("\n");
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构与算法——直接插入排序

好久没写博客了,今天就简单总结下直接插入排序。 什么是直接插入排序? 直接插入排序就是将某一个元素与顺序表中元素进行比较,然后插入到相应的位置,使整个顺序表处于有序状态。有关数据结构的书上都会用扑...
  • hsk256
  • hsk256
  • 2015年06月11日 16:59
  • 1385

八大排序算法之一直接插入排序(C语言)

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 ...
  • liujiejieliu1234
  • liujiejieliu1234
  • 2015年04月22日 15:06
  • 8009

排序算法一:直接插入排序

在我的博文《“主宰世界”的10种算法短评》中给出的首个算法就是高效的排序算法。本文将对排序算法做一个全面的梳理,从最简单的“冒泡”到高效的堆排序等。...
  • LG1259156776
  • LG1259156776
  • 2015年09月23日 22:08
  • 41781

北京工业大学 数据结构与算法 (电控学院) 第三章排序作业 r[k]作哨兵直接插入排序 双向起泡

  • 2015年03月08日 00:36
  • 1KB
  • 下载

直接插入排序的C实现

  • 2013年05月16日 11:20
  • 495B
  • 下载

直接插入排序

  • 2014年03月25日 15:22
  • 1.02MB
  • 下载

直接插入排序

  • 2015年10月06日 22:02
  • 1.01MB
  • 下载

直接插入排序法和分治法

  • 2011年04月09日 03:05
  • 2KB
  • 下载

六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。

  • 2017年12月04日 21:28
  • 510KB
  • 下载

直接插入排序

  • 2018年01月13日 09:47
  • 600B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法-插入排序之直接插入排序
举报原因:
原因补充:

(最多只允许输入30个字)