数据结构与算法之插入排序
来源:互联网 发布:淘宝店铺标准 编辑:程序博客网 时间: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; //找到要插入的位置
}
}
- 数据结构与算法之二分法插入排序
- 数据结构与算法之插入排序
- 数据结构与算法之插入排序
- Java数据结构与算法之插入排序
- 数据结构与算法-插入排序
- 【数据结构与算法】插入排序
- 算法与数据结构---插入排序
- 数据结构与算法之三直接插入排序
- 数据结构与算法学习之路:直接插入排序
- 数据结构与算法学习之路:二分插入排序
- Java数据结构与算法之数组排序——插入
- 数据结构与算法之基础排序(冒泡/插入/选择)<十>
- 数据结构与算法专题之查找与排序——插入类排序(插入、希尔)
- 数据结构:排序算法之插入排序
- 数据结构<一> 排序算法之插入排序
- 数据结构之插入排序与希尔排序
- 插入排序 Java数据结构与算法
- python数据结构与算法 32 插入排序
- CDockablePane的使用与注意
- Qt 独立运行时伴随CMD命令窗口
- 二叉树相关习题
- 10 张 PPT 告诉你华为如何从 89 亿人民币到 389 亿美金
- =====umeng--->push======
- 数据结构与算法之插入排序
- 产品经理3件事|搭架子、定流程、抠细节
- Ubuntu 12.04 更新软件源
- hdu 2894 DeBruijin
- http://blog.csdn.net/qingrun/article/details/42738111
- QML中MouseArea元素的介绍
- 瑞郎兑欧元周四盘中暴涨近30%,瑞郎当天的波幅创1970年代多数主要货币实行自由浮动机制以来单日最大
- Redhat9.0下用samba实现windows与linux文件共享
- UVA Ant on a Chessboard