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();  //降序,从大到小
}

没有评论:

发表评论