c语言插入法排序的算法步骤

 我来答
书中橙子
2014-02-09 · TA获得超过117个赞
知道小有建树答主
回答量:124
采纳率:100%
帮助的人:67.1万
展开全部
算法描述
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
从第一个元素开始,该元素可以认为已经被排序
取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置后
重复步骤2~5
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。
范例程式码
void insertion_sort(int array[], int first, int last)
{
int i,j;
int temp;
for (i = first+1; i<=last;i++)
{
temp = array[i];
j=i-1;

while((j>=first) && (array[j] > temp))
{
array[j+1] = array[j];
 j--;
}
array[j+1] = temp;
}
}
NBA周报
2014-02-09 · TA获得超过203个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:152万
展开全部
步骤
⒈从有序数列{a1}和无序数列{a2,a3,…,an}开始进行排序;
⒉处理第i个元素时(i=2,3,…,n),数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;
⒊重复第二步,共进行n-i次插入处理,数列全部有序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2015-11-26 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
插入排序法的基本操作就是将一个数据插入到已经排好序的有序数据中(初始时可以认为只有一个元素的序列是有序的序列,即从第二个数据起开始逐个插入),从而得到一个新的、个数加一的有序数据。
该算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的序列中适当位置上,直到全部插入完为止。
为避免反复比较是否越界,下面的插入排序使用了“哨兵”。即在插入的尽头,复制一个待插入数据的副本(a[0]),一身二用,既作为保存数据,又有效防止搜索时越界而反复检测是否越界。每一轮中,比待插入的数大的数,逐个后移一位,最后把a[0]正确放置到位。
1)a[1]~a[n]中存放数据,i=2
2)a[0]=a[i],j=i;
3)若a[j-1]>a[0],则a[j]=a[j-1],然后j--;  再转3)
4)a[j]=a[0];
5)i++; 若i<=n,则j=i,转3),否则结束。
排序结束后a[1]~a[n]即为升序的序列。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友413538b
2014-02-09 · 超过10用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:25.6万
展开全部
任何一本数据结构的书,在排序一章有详细的介绍。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式