2013年1月6日星期日
QueryPerformanceCounter.Cpp
/*
QueryPerformanceCounter.Cpp
本文开启我的算法之旅.
c的c++(stl)的.
排序(升降)
查找(最大,最小,特定)
还有树,图等.
不停的更新改进中.
没有考虑效率,也不是最优秀的算法,关键是能实现.
*/
#include <windows.h>
//也可以考虑用链表.
int x[100] = {};//100个元素,最后一个的索引是99.
void init ()
{
LARGE_INTEGER counter;
for (int i = 0;i<100;i++)
{
//Sleep(0);//不加这个会重复,加这个相差为1.
Sleep(i);//这个效果比较好.
QueryPerformanceCounter(&counter);//失败的可能性很小,不考虑了.
x[i] = counter.QuadPart % 1000;//这个没有重复的,在双核的cpu上.
//x[i] = GetTickCount() % 1000;//这个有一些是重复的.
//x[i] = GetTickCount64() % 1000;//这个有一些是重复的.
}
}
void ergodic()
{
for (int i = 0;i<100;i++)
{
printf("%4d\n", x[i]);
}
}
int find_max()
{
int m = 0;
for (int i = 0;i<100;i++)
{
if (m <= x[i])
{
m = x[i];
}
}
return m;
}
int find_min()
{
int m = x[0];
for (int i = 0;i<100;i++)
{
if (m >= x[i])
{
m = x[i];
}
}
return m;
}
int find(int n)
{
//返回索引,如果找不到返回-1.
unsigned int m = -1;
for (int i = 0;i<100;i++)
{
if (n == x[i])
{
return i;
}
}
return m;
}
void sort_up()
{
for (int j = 0;j<100;j++)
{
for (int i = 0;i<100-1;i++)
{
if (x[i] > x[i+1])
{
int t = x[i];
x[i] = x[i+1];
x[i+1] = t;
}
}
}
}
void sort_down()
{
for (int j = 0;j<100;j++)
{
for (int i = 0;i<100;i++)
{
if (x[i] < x[i+1])
{
int t = x[i];
x[i] = x[i+1];
x[i+1] = t;
}
}
}
}
int main()
{
int r = 0;
init();
ergodic();
r = find_max();//返回最大的.
printf("最大是:%4d\n", r);
r = find_min();//返回最小的.
printf("最小是:%4d\n", r);
int n = x[99];
r = find(n);//查询索引.
sort_up();//升序,从小到大
sort_down(); //降序,从大到小
}
订阅:
博文评论 (Atom)
没有评论:
发表评论