您的位置:首页 > 其它

查找最小的k个元素的自写算法

2012-02-06 19:58 260 查看
题目:

输入n个整数,输出其中最小的k个。

例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4

解题:1, 通过排序数组,然后取前k个数据 时间复杂度为O(n^2)

      2, 通过循环k次,找出最小的k个数据,时间复杂度为:O(n*k)

      3, 如果提前知道要输出的k个数据,则建立k个变量,依次取出,时间复杂度为O(n)

1. 

void minsequence(int *p, int len)

{
for (int i = 0; i < len; ++i)
{
for (int j = i + 1; j < len; ++j)
{
if (p[i] > p[j])
{
int tmp = p[i];
p[i] = p[j];
p[j] = tmp;
}
}
}

}

2.
void sequence(int *p, int len, int num)

{
for (int i = 0; i < num; ++i)
{
int minx = p[i];
int subx(0);
bool bbreak(true);
for (int j = i + 1; j < len; ++j)
{
if (minx > p[j])
{
minx = p[j];
subx = j;
bbreak = false;
}
}
if (!bbreak)
{
int temp = p[i];
p[i] = minx;
p[subx] = temp;
}
}

}

3.

void findminnum(int *p, int len)

{
int min1, min2, min3, min4;
min1 = p[0];
min2 = min3 = min4 = 0;
for (int i = 1; i < len; ++i)
{
if (min1 > p[i])
{
min4 = min3;
      min3 = min2;
min2 = min1;
min1 = p[i];
continue;
}
else if ((min2 > p[i]) || (min2 == 0))
{
min4 = min3;
min3 = min2;
min2 = p[i];
continue;
}
else if ((min3 > p[i]) || (min3 == 0))
{
min4 = min3;
min3 = p[i];
continue;
}
else if ((min4 > p[i]) || (min4 == 0))
min4 = p[i];
}

std::cout << "The number is:" << min1 << " "
<< min2 << " " << min3 << " "
<< min4 << std::endl;

}

4:如果读者有更好的算法,请写出,一起交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法
相关文章推荐