若有以下程序段: int a[]={4,0,2,3,1}, i,j,t; for(i=1;i<5;i++) { t=a[i]; j=i-1; while(j>=0&&t>a[j])

若有以下程序段:
int a[]={4,0,2,3,1}, i,j,t;
for(i=1;i<5;i++)
{ t=a[i]; j=i-1;
while(j>=0&&t>a[j])
{ a[j+1]=a[j]; j–; }

则该程序段的功能是 _____.
A)对数组a进行插入排序(升序)
B)对数组a进行插入排序(降序)
C)对数组a进行选择排序(升序)
D)对数组a进行选择排序(降序)

B

int a[ ]={4,0,2,3,1,},i,j,t;
for(i=1;i<5;i++) //从第2个元素开始进行插bai入
{
t=a[i];j=i-1; //保存“副本”,du并从前一个元素开始,向前扫zhi描
while(j>=0&&t>a[j]) //在查找dao范围内,并且待插入值大于扫描对象时
{ a[j+1]=a[j]; j–; } //扫描对象后移一位,继续向前准备扫描前一个元素
a[j+1]=t; //扫描结束,比插入对象小的元素都已后移,待插入值插入到合适位置
}

一、bai选择排序
原理:将初始序列(A[0]A[n-1])作为待排序序列,第du一zhi趟在待排序序列(A[0]A[n-1])中找dao到最小值元素,将其与第一个元素A[0]交换,这样子序列(A[0])已经有序,下一趟在排序在待排序子序列(A[1]A[n-1])中进行。第i趟排序在待排序子序列(A[i-1]A[n-1])中找到最小值元素,与该子序列中第一个元素A[i-1]交换。经过 n-1 趟排序后使得初始序列有序。
其他说明:选择排序的最好、最坏和平均情况的时间复杂度都为O(n2),而且它还需交换元素(n-1)次和移动元素3(n-1)次;它是不稳定的排序算法。
二、插入排序
原理:将初始序列中的第一个元素作为一个有序序列,然后将剩下的 n-1 个元素按关键字大小依次插入该有序序列,每插入一个元素后依然保持该序列有序,经过 n-1 趟排序后使初始序列有序。
首先你得了解下这两种算法的区别,你的代码明显是 从第二个元素开始遍历,每个元素都跟他之前的所有元素比较,然后插入到大小合适的位置,所以用的数插入排序算法;然后每次当t(当前元素) 大于 前边某一个元素的时候,元素需要后移一位,可以简单的理解为 凡是比t小的元素统一后移一位,前边空出来的位置就是给 t的
简单的那数字描述下
4 0 2 3 1 左边初始有效队列 4 遍历 0 2 3 1
t= 0 时,因为 前边只有4,没有比 0小的, 前边有序序列就是4 0
t = 2 时,0 比2 小,所以 0 需要后移一位,占用了2的位置,0空出来的位置就给2用了,前边序列就变成了 4 2 0
t =3 时 3 比 0 大, 0 后移一位占用了3的位置, 3 比2 大 ,2 后移一位占用了 0原来 的位置
前边序列就变成了 4 3 2 0
t=1 的时候也是同样的方式,最终前边有序序列就是 4 3 2 1 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值