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

来源:互联网 发布:淘宝店铺标准 编辑:程序博客网 时间:2024/05/02 17:32

       插入排序算法思想:一维数组a[N],有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[N]中的元素从小到大按升序排序)。当第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; //找到要插入的位置
}
}






















0 0
原创粉丝点击