插入排序法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2016
数学1502班:薛文君、代登莲、姚丽、郭瑶、黄子为、沈栋、丁锡泉
简单理解插入法
红
橙 黄
绿 青 蓝
紫
例如:
设a数组已有初值且已按升序排序,输入一个 整数x,并插入到a数组中,使数组依然有序。
分析:从后向前找第一个大于x的元素a[i],将a[i+1]~a[6]元素依次 后移一位,最后将x放入a[i+1]中。
一个数组a[6]={2,5,9,10,19}
i
a[0]
j
a[1] a[2] a[3] a[4] a[5]
i
j
i
i
j
当x=0时: (i始终小于5, 因为最后一个中 没有数,不需要 与x进行比较。)
i j
……
j
i
可以看到,当x<a[i](i=0 1 2 3 4) Leabharlann Baidu,直接将后面的数每个后移一位 即可
寻找插入元素要放的位置
为要插入的元素腾出位置
对应位置插入元素
主函数:
void main() { int num[6]={19,10,9,5,2}; int i,x; scanf(“%d”,&x); insert(num,x); for(i=0;i<6;i++) printf(“%5d”,num[i]); }
j j
i
此时,直接将x存在最后一位即可。
正逆序的比较次数
X的值 0 10 20 正序时的比较次数 5 2 1 逆序时的比较次数 1 4 5
规律:正序时的比较次数+逆序时的比较次数= 元素个数
源程序:
调用函数:
#include<stdio.h> insert(int a[],int x) { int i,j; for(i=5;i>=0;i--) if(a[i]>x) break; for(j=5;j>=i+1;j--) a[j+1]=a[j]; a[i+1]=x; }
初始化时,预留一个空位
运行结果:
谢谢观看~
i
当x=10:
当x<=a[i]时, 将i向后移动 一位,否则, 从i以后的每 个后移一位。 (i始终小于 5)
a[0] a[1]
j
i
a[2] a[3] a[4] a[5\
j j
i
i
j
将x与 a[i]比较,找 出x的位置, 然后将后面的 依次向后移动, 为x留出一个 位置
i i
j
j
i
当x=20:
数学1502班:薛文君、代登莲、姚丽、郭瑶、黄子为、沈栋、丁锡泉
简单理解插入法
红
橙 黄
绿 青 蓝
紫
例如:
设a数组已有初值且已按升序排序,输入一个 整数x,并插入到a数组中,使数组依然有序。
分析:从后向前找第一个大于x的元素a[i],将a[i+1]~a[6]元素依次 后移一位,最后将x放入a[i+1]中。
一个数组a[6]={2,5,9,10,19}
i
a[0]
j
a[1] a[2] a[3] a[4] a[5]
i
j
i
i
j
当x=0时: (i始终小于5, 因为最后一个中 没有数,不需要 与x进行比较。)
i j
……
j
i
可以看到,当x<a[i](i=0 1 2 3 4) Leabharlann Baidu,直接将后面的数每个后移一位 即可
寻找插入元素要放的位置
为要插入的元素腾出位置
对应位置插入元素
主函数:
void main() { int num[6]={19,10,9,5,2}; int i,x; scanf(“%d”,&x); insert(num,x); for(i=0;i<6;i++) printf(“%5d”,num[i]); }
j j
i
此时,直接将x存在最后一位即可。
正逆序的比较次数
X的值 0 10 20 正序时的比较次数 5 2 1 逆序时的比较次数 1 4 5
规律:正序时的比较次数+逆序时的比较次数= 元素个数
源程序:
调用函数:
#include<stdio.h> insert(int a[],int x) { int i,j; for(i=5;i>=0;i--) if(a[i]>x) break; for(j=5;j>=i+1;j--) a[j+1]=a[j]; a[i+1]=x; }
初始化时,预留一个空位
运行结果:
谢谢观看~
i
当x=10:
当x<=a[i]时, 将i向后移动 一位,否则, 从i以后的每 个后移一位。 (i始终小于 5)
a[0] a[1]
j
i
a[2] a[3] a[4] a[5\
j j
i
i
j
将x与 a[i]比较,找 出x的位置, 然后将后面的 依次向后移动, 为x留出一个 位置
i i
j
j
i
当x=20: