您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法之插入排序

2015-01-16 13:01 337 查看
插入排序算法思想:一维数组a
,有N个元素,现要用插入排序算法进行排序。插入排序由N-1趟排序组成。对于P=1趟到P=N-1

趟,插入排序保证从位置0到P-1上的元素是已经排过序的。插入排序利用了这样的事实:位置0到位置P-1上的元素是已经排过序的。

我们将第P个元素首先保存在中间变量temp中,将第P个元素依次和第P-1,P-2,P-3.....0个元素(从P-1开始依次向前的元素)进行

比较(本文是将该一维数组a
中的元素从小到大按升序排序)。当第P-1个元素到第i个元素比temp大时,在数组中将第P-1个元素

到第个元素向后移动一个单位,然后将temp赋值给第i个元素。

配合下图显示一个简单数组在每一趟插入后的排序情况:第P=1趟排序将元素a[1]=8和元素a[0]=34进行排序,依次类推,

P= 1 2 3 4 5;

初始 34 8 64 51
32 21;

P=1 排序结果 8 34 64 51 32 21

P=2 8 34 64 51 32 21

P=3 8 34 51 64 32 21

P=4 8 32 34 51 64 21

P=5 8 21 32 34 51 64

完整的C语言程序实现

#include<stdio.h>

#define NUM 6

void insertion(int a[],int N); //子函数的声明

void main()

{

int b[NUM],i,j;

printf("please input the numbers:\n"); //输入一维数组

for(i=0;i<NUM;i++)

{

scanf("%d",&b[i]);

}

insertion(b,sizeof(b)/sizeof(int)); //调用插入排序函数

printf("output the sorted numbers:\n"); //输出排序之后的结果

for(i=0;i<NUM;i++)

{

printf("%d ",b[i]);

}

printf("\n");

}

void insertion(int a[],int N) //插入排序算法,注意该子函数必须要有两个形参,N为数组元中的元素个数

{

int j,p;

int temp;

//这里 N=sizeof(a)/sizeof(int),不能求出数组元素个数,因为sizeof(a)/sizeof(int)=1;

for(p=1;p<N;p++)

{

temp=a[p]; //首先将要插入的元素数值存储在temp中

for(j=p;j>0&&a[j-1]>temp;j--)//查找要插入元素在数组中的位置,从后向前比较插入

{

a[j]=a[j-1]; //元素逐个向后移动一个位置

}

a[j]=temp; //找到要插入的位置

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: