数组百分比算法实现

Sar*_*rah 3 c arrays sorting algorithm max

所以我几天前只是在C中编写程序并且我有这个程序,它采用一个完整的整数排序文件,使用quicksort 1st算法对其进行排序

关于我在这方面做错了什么的任何建议?

ryy*_*ker 5

从你所描述的,听起来你几乎就在那里.您试图获取集合的第一个元素,该元素的值等于(或者仅比该集合的所有其他成员的90%).你已经完成了排序.其余的应该只是按照这些步骤(如果我理解你的问题):

1)将集合排序到一个数组(你已经完成了这个我认为)
2)计算集合中的数字,存储在float n; //集合中的元素数量
3)索引通过排序数组到第0.9*n个元素,(选择)超出该点的第一个不是之前的重复)
4)显示结果

这是n我所描述的实现(有点,我没有存储):(忽略随机数生成器,等等,它只是获取数组的快速方法)

#include <ansi_c.h>
#include <windows.h>
int randomGenerator(int min, int max);
int NotUsedRecently (int number);
int cmpfunc (const void * a, const void * b);

int main(void)
{
    int array[1000];
    int i;

    for(i=0;i<1000;i++)
    {
        array[i]=randomGenerator(1, 1000);
        Sleep(1);
    }

    //sort array
    qsort(array, 1000, sizeof(int), cmpfunc);

    //pick the first non repeat 90th percent and print
    for(i=900;i<999;i++)
    {
        if(array[i+1] != array[i])
        {
            printf("this is the first number meeting criteria: %d", array[i+1]);
            break;
        }
    }
    getchar();  

    return 0;
}






int cmpfunc (const void * a, const void * b)
{
   return ( *(int*)a - *(int*)b );
}


int randomGenerator(int min, int max)
{
    int random=0, trying=0;

    trying = 1;         
    srand(clock());
    while(trying)
    {

        random = (rand()/32767.0)*(max+1);
        (random >= min) ? (trying = 0) : (trying = 1);
    }

    return random;
}
Run Code Online (Sandbox Code Playgroud)

这是我的第一个随机生成的数组(以90%为中心)的输出,与算法选择的数据进行比较:左边的列是元素编号,右边是随机生成的整数的排序列表.(注意它跳过重复以确保最小值超过 90%)

在此输入图像描述 在此输入图像描述

总结:正如我所说,我认为你已经,几乎就在那里.请注意我的代码的这一部分与您的相似之处:

在此输入图像描述

你已经有了非常相似的东西.只需修改它以开始查看数组的90%索引(无论是什么),然后只选择不等于前一个的第一个值.