数据结构实验5查找排序算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五、查找排序算法得实现
一、实验目得
1.掌握顺序、二分法查找方法及适用场合,并能在解决实际问题时灵活应用。
2.掌握各种排序(直接插入,希尔,冒泡,快速排序,简单选择,堆排序等)方法及
适用场合,并能在解决实际问题时灵活应用。
二、实验内容
随机输入(或随机产生)30个数
(1)采用冒泡排序完成对这30个数得排序
(2)采用顺序、折半查找在(1)中排好序得数据中完成查找任务
(3)分别采用插入、快速与希尔完成对这30个数得排序任务,并输出每一趟排序后得结果
三、实验代码:
#include
#include
#include
#define MaxSize 100
typedef struct
{
int key;
}RecordType;
//直接插入排序
void InsertSort(RecordType r[], int length)
{
for (int i=2; i<=length;i++)
{
r[0]=r[i];
int j=i-1;
while (r[0]、key { r[j+1]=r[j]; j=j-1; } r[j+1]=r[0]; } } //冒泡排序 void BubbleSort(RecordType r[], int length) { int t; for (int i=1; i<=length; i++) { for (int j=1; j<=length-i; j++) { if (r[j]、key>r[j+1]、key) { t = r[j+1]、key; r[j+1]、key=r[j]、key; r[j]、key=t; } } } } //快速排序 int QKPass(RecordType r[], int left, int right) { int low=left; int high=right; r[0]=r[left]; while (low < high) { while (low { high--; } if (low < high) { r[low] = r[high]; low++; } while (low < high && r[low]、key < r[0]、key) { low++; } if (low < high) { r[high] = r[low]; high--; } } r[low] = r[0]; return low; } void QKSort(RecordType r[], int low, int high) { if (low < high) { int pos=QKPass(r,low,high); QKSort(r, low, pos-1); QKSort(r, pos+1, high); } } //希尔排序 void ShellInsert(RecordType r[], int length, int delta) { int i, j; for (i=1+delta; i<=length; i++) { if (r[i]、key < r[i-delta]、key) { r[0] = r[i]; for (j=i-delta; j>0 && r[j]、key>r[0]、key; j-= delta) { r[j+delta] = r[j]; } r[j+delta] = r[0]; } } } void ShellSort(RecordType r[], int length, int delta[], int n) { for (int i=0; i { ShellInsert(r, length, delta[i]); } } void ShowResult(RecordType* r, int length) { for (int i=1; i<=length; i++) { printf("%-5d", r[i]); if (i%10==0) { printf("\n"); } } } void RandNum(RecordType r[MaxSize]) { srand((unsigned)time(NULL)); for (int i=1; i<=30;i++) {