- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
排 序 ;10.1 基本概念 ;※排序的分类;※排序的分类; 10.2 插入排序; 10.2.1 直接插入排序 ;在直接插入排序过程中,每将一个记录插入到前面已排好序的记录序列中,称为一趟直接插入排序。
一趟插入排序的基本思想为:
将记录R[i]插入到有序子序列R[1..i-1]中,使记录的有序序列从R[1..i-1]变为R[1..i]。
显然,完成这个“插入”需分三步进行:
(1)查找R[i]的插入位置j+1;
(2)将R[j+1.. i-1]中的记录后移一个位置;
(3)将R[i]复制到R[j+1]的位置上。 ; 已知一关键字序列(48,62,35,77,55,14,35, 98),请给出采用直接插入排序的方法对这8个数按升序排序时的每一趟排序过程。;void insertsort(int R[] ,int n)
{ int i,j,;
for(i=2;i=n;i++)
{
R[0]=R[i]; /*R[0]中存放待插入记录*/
j=i-1; /*在有序子序列中查找它的插入位置*/
while (R[0]R[j])
{ R[j+1]=R[j]; j--; } /*将所有比它大的记录后移*/
R[j+1]=R[0]; /*将待插入记录插入*/
}
}
;※直接插入排序算法的性能;
从键盘上输入10个整数,用直接插入排序的方法对这10个数按由大到小的顺序排序并输出。编写出相应的C语言程序。
分析:
需要注意是,在介绍直接插入排序算法时,排序是按由小到大的顺序排列,而本例要求是按由大到小的顺序排列。所以,在寻找插入位置时,要将上面算法的for语句中的条件R[0]R[j],改为R[0]R[j]。对上面算法稍作修改,写出本例的C语言程序如下: ;#define N 10
#include stdio.h
void main()
{ int i,j,R[N+1];
for(i=1;i=N;i++) /*输入要排序的10个数*/
scanf(“%d”,R[i]);
for(i=2;i=N;i++) /*用直接插入法排序*/
{ R[0]=R[i];
for( j=i-1; R[0]R[j]; j--)
R[j+1]=R[j];
R[j+1]=R[0];
}
for(i=1;i=N;i++) /*输出排好序的有序序列*/
printf(“%d”,R[i]);
};10.3 交换排序 ;10.3.1 冒泡排序
※冒泡排序的基本思想
在待排序的记录序列中,从第一个待排序的记录R1开始,依次比较两个相邻记录R1和R2,若R1R2,则交换记录R1 和R2 ,否则不交换。然后再对R2 和R3进行同样的比较,依次类推,直到序列中的最后两个记录处理完为止。这样的一个过程就叫做一趟冒泡排序。
这样,在一趟比较完毕后,关键字值最大的记录就被交换到最后,然后再对前面的n-1个记录执行上述过程,如此重复n-1次。 ; 已知一关键字序列(35,14,8,16,39,2,27),请给出采用冒泡排序的方法对这7个数按升序排序时的第一趟排序过程。;void bubblesort(int R[] ,int n)
{ int i,j;
for(i=1;i=n-1;i++) /*外循环控制排序的趟数*/
for(j=1; j=n-i; j++) /*内循环控制每一趟两两比较的次数*/
if(R[j]R[j+1])
{
R[0]=R[j]; /*交换两个记录*/
R[j]=R[j+1];
R[j+1]=R[0];
}
};void bubblesort(int R[] ,int n)
{ int i,j,
原创力文档


文档评论(0)