数据结构与算法之插入排序
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; //找到要插入的位置
}
}
,有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; //找到要插入的位置
}
}
相关文章推荐
- 数据结构与算法学习-简单排序算法之插入排序
- Python 数据结构与算法 —— 插入排序
- Python 数据结构与算法——插入排序(insertion sort)
- 数据结构与算法——插入排序
- 数据结构与算法之插入排序
- 【数据结构与算法】插入排序
- 数据结构与算法(8)---Java语言实现:插入排序
- 数据结构与算法_插入排序
- 【数据结构与算法】——插入排序
- 【数据结构与算法】——插入排序
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
- 数据结构基础算法整理归纳:插入排序(三)
- 【数据结构与算法】插入排序
- C# 插入排序(数据结构与算法)
- <四>java数据结构与算法 插入排序
- 数据结构与算法——插入排序和希尔排序
- Python3 数据结构与算法之插入排序
- 数据结构与算法:C++实现插入排序
- 插入排序 Java数据结构与算法
- Pku acm 1274 The Perfect Stall 数据结构题目解题报告(十三)---- 匈牙利算法求二分图的最大匹配