实验报告
课程名称 《算法分析与设计》 实验日期 2021 年 4 月 18 日 至 2021 年 4 月 25日
学生姓名 石晨昊 所在班级 计算机194 学号 2019212212322
实验名称 选第K小元素
实验地点 同组人员
1.问题
从无序数组中找到第k小的数
2.解析
3.设计
int Select(int a[], int start,int end,int k) {
while(i <= end){//对数组进行分组
int iend = i + 4;
if (iend >= end) {
iend = end;
}
quickSort(a, i, iend);
s[m] = a[(i + iend) / 2];//找出每组中位数
m++;
i = iend+1;
}
quickSort(s, 0, m - 1);//对中位数进行排序
int mid = s[m / 2];
int al[MAX], ar[MAX];
int count_al = 0, count_ar = 0;
for (int j = start; j <= end; j++)//通过m*,将数组分为两部分
{
if (a[j]<mid)
{
al[count_al++] = a[j];
}
else if (a[j] > mid)
{
ar[count_ar++] = a[j];
}
}
if (k==count_al+1)
{
return mid;
}
else if (k<= count_al)
{
return Select(al, 0, count_al - 1, k);
}
else
{
return Select(ar, 0, count_ar - 1, k - count_al-1);
}
}
4.分析
5.源码
https://github.com/695950719/Algorithm-design/blob/main/lab6.cpp