- 1
- 0
- 约4.37千字
- 约 43页
- 2018-02-13 发布于天津
- 举报
第9章 排序及查找算法及其实现 ;本章主要内容;在工程领域的计算机程序设计中,使用最广泛的,也是研究最充分的课题就是排序和查找算法了。有关排序和查找的算法遍布在千千万万的程序中,无论是数据库程序,还是各种编译程序、各种游戏,无一不用到排序和查找算法的 ; 所谓排序,就是将一个数据元素(或记录)的任意序列,按照指定的关键字,重新排成一个有序的序列 ;假设含n个记录的序列为:
其相应的关键字序列为
排序的目的是为了确定一个新的序列
对应的关键字满足如下的非递减(或非递增)关系;交换法;9.1.4排序效率 ;9.2 冒泡排序法的设计及其实现 ;冒泡排序(Bubble Sort)算法是最简单、最常见的也是效率最差的算法,适用于
小数据
量的排
序。;【例】有一组序列,顺序为5、4、3、2、1,用冒泡算法,对此序列按从小到大顺序排列
#include stdio.h
#include stdlib.h
void PrintArray(int * a, int n)
//输出排序每一步结果的函数
{ int i;
for(i=0; in; i++)//输出元素
printf(%4d,a[i]);
printf(\n);
};9.3 选择排序法的设计及其实现 ;选择排序法的过程很简单。首次扫描的时候选择出最小的一个元素,将它和第一个位置(也称为当前的基准元素位置)的元素交换。然后从剩下的n-1个元素中选择次小的元素,再和第二个位置(变成当前新的基准元素位置了)的元素交换。不断重复这一过程,直到最后一次从最后两个元素里面选择比较小的一个,然后交换。 ;【例】选择排序法;void SelectSort(int a[], int n) //选择排序法的函数实现
{ int i,j,tmp; // tmp为中间变量
int min; //保存序列中的最小值
int count=0; //记录交换次数
printf(initial sorting:);
PrintArray(a,n); //输出当前结果
? for(i=0;in-1;i++) //开始排序
{ min=i; //基准元素的下标
//其他元素与该下标下的元素比较;for(j=i;jn;j++)
{ if(a[j]a[min]) //若小于基准元素,则交换
min=j; //把要交换的位置告诉min
}
if(min!=i) //若min的值非原来的i ,则要交换
{ tmp=a[i];//与基准元素进行位置交换
a[i]=a[min]; a[min]=tmp;
}
count++;
printf(after %d sorting:,count);
PrintArray(a,n);
}
};9.4 插入排序法的设计及其实现 ; 插入排序法的思想是:当插入第i个元素的时候,前面i-1个元素已经排好了,这时只需要用第i个的关键码从最后开始与其他的进行比较,找到合适的位置,将后面的对象依次后移,然后将新的对象插入。 ;【例】用插入排序法实现排序
void InsertSort(int a[],int n)
{int i,j,tmp;
for (i=1;in;i++)
{tmp=a[i];
for(j=i-1;(j=0) (tmpa[j]);j--)
a[j+1]=a[j]; //其余元素后移
a[j+1]=tmp;//a[i]就插在这个位置
printf(after %d sorting:,i);
PrintArray(a,i+1); //输出当前结果
}};前面介绍的几种排序算法都有一个共同的缺点,当序列中元素比较多的时候,排序时间会非常长,甚至长得不可忍受 ;9.5 SHELL排序法的设计及其实现 ;9.5.1 SHELL排序法设计思想 ;【例】对既有序列{8,7,6,5,4,3,2,1},用SHELL排序法从小到大排序
void shell(int count,int a[])
//SHELL算法排序函数模块
{int i,j,gap=count,k,x;
for(k=0;kcount;k++)//控制循环次数
{ gap=gap/2;;for(i=gap;icount;++i)//进行排序
{x=a[i];
for(j=i-gap;(xa[j])(j=0);j=j-gap)
a[j+gap]=a[j];
a[j+gap]=x;
}
if (gap==0) break;
printf(gap=%d:\n,gap);
PrintArray(a,count);//输出结果
您可能关注的文档
- 普通话培训(知识篇)教学教程.ppt
- 普通话培训幻灯片教学讲义.ppt
- 普通心理学第一章绪论心理学的研究对象和方法方案教学教程.ppt
- 普通心理学感觉幻灯片教学讲义.ppt
- 普外科各种引流管的护理介绍教学.ppt
- 普外科各种引流管的护理医学课幻灯片.ppt
- 七彩校园幻灯片.ppt
- 七律长征方案教学教程.ppt
- 七年级上册教材分析方案教学教程.ppt
- 七年级上学期期中家长会方案教学教程.ppt
- 宣贯培训(2026年)SNT 5350.2-2021硫磺 砷含量的测定 原子荧光光谱法.pptx
- CN101712841B 一种紫外光固化粉末涂料的制作方法 (湖南文理学院).docx
- 宣贯培训(2026年)SNT 5362-2021 出口食品中氟啶虫胺腈残留量的测定.pptx
- 宣贯培训(2026年)SNT 5354.2-2021地面材料防滑性能测试方法 第2部分:倾斜平台法.pptx
- CN101710194A 多层掺稀土离子环芯光纤及其制作方法 (北京交通大学).docx
- 宣贯培训(2026年)SNT 5365-2022《出口植物源性食品中氟唑磺隆和氟吡磺隆残留量的测定 液相色谱-质谱质谱法》.pptx
- 宣贯培训(2026年)SNT 5366.1-2022商品化试剂盒检测方法 肠杆菌科计数 方法一长文.pptx
- CN101710193A 一种微结构光纤的制作方法 (电子科技大学).docx
- 宣贯培训(2026年)SNT 5585-2024进出口化妆品中苯扎溴铵和苯扎氯铵的测定.pptx
- 宣贯培训(2026年)SNT 5607-2024《进出口纺织品 二异氰酸酯的测定 气相色谱-质谱法》.pptx
原创力文档

文档评论(0)