数据结构实验5查找排序算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 (lowr[0]、key)

{

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++)

{

相关文档
最新文档