查找最小的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:如果读者有更好的算法,请写出,一起交流!
输入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:如果读者有更好的算法,请写出,一起交流!
相关文章推荐
- 微软算法100题05 查找最小的k 个元素
- C++ 算法 查找旋转数组中的最小值 允许重复元素
- 算法之查找第k小的数和查找最小的k个元素
- 算法习题6:查找最小的k个元素
- 每天一算法(查找最小的k个元素(数组))
- 设计一个最优算法来查找n个元素数组中的最大值和最小值
- 笔试算法题(05):转换BST为双向链表 & 查找栈中的最小元素
- 字符串算法——查找有序数组旋转后的最小值(无重复元素)(Find Minimum in Rotated Sorted Array)
- 【算法总结-top K】堆--查找最小(大)的k个元素
- 每天一道算法题4 查找最小的k个元素
- 算法实验一:二分查找算法改进: 当搜索元素x不存在时,返回小于x的最大元素位置i和大于x的最小元素位置j. 当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
- 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。
- 字符串算法——查找有序数组旋转后最小值(有重复元素)(Find Minimum in Rotated Sorted Array II)
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- 每天一道算法题4 查找最小的k个元素
- 【算法总结-top K】堆--查找最小(大)的k个元素
- 程序员面试50题(1)—查找最小的k个元素[算法]
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- 算法讨论(四)--查找最小的k个元素
- 查找最小的k 个元素之C#算法实现