Soft Ware/C 언어!!

동적할당 과 랜덤함수를 이용하여 데이터값 넣기

달려가보자 2011. 12. 12. 14:27

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>

 

void GenerateRandomNumber(int *list, int n)
{
 int count ;
 int Data = 0;
 int Data1 = 0;
 int nCount = 0,compare_Data=0;
 int *copylist = list;
 int first = 0, end = 0;
 srand(time(NULL));
 first = clock();
 for(count = 0;count<n;)
 {
  
  Data=rand();
  Data1 = Data/(n+1);
  if( Data1 == 0 && Data != 0)
  {
   for(nCount=0;nCount<=count;nCount++)
   {
    if(copylist[nCount] == Data)
    {
      compare_Data++;
      break;
    }
 
   }
    
   if(compare_Data == 0 )
    {
     copylist[count] = Data;
     count++;
    }
   compare_Data = 0;
  }
 }
 end = clock();

 for(count = 0,copylist = list; count < (n/10); count++)
 {
  for(Data = 0; Data <10; Data++)
  {
   printf("%3d ",*copylist);
   copylist++;
  }
  printf("\n");
 }
 printf("\n");
 printf("%d", end-first);
}
int BinarySearch(int *list, int Count, int Key)
{
 int nCount = 0;
 int *copylist = list;

 for(nCount=0;nCount<Count;nCount++)
 {
  if(copylist[nCount]==Key)
  {
   return copylist[nCount];
  }
 }
 return -1;
}
int Compare(const void *arg1, const void *arg2)
{
 return *(int*)arg1 - *(int*)arg2;
}
int main()
{
 int *list = NULL;
 int n = 0;
 int Key = 0;

 printf("n 입력 : ");

 scanf_s("%d",&n);

 list = (int *)malloc(sizeof(int)*n);
 if(list == NULL)
 {
  printf("Memory Allocation Error!!\n");
  exit(-1);
 }
 GenerateRandomNumber(list, n);
 qsort(list,n,sizeof(int),Compare);
 while(1)
 {
  printf("찾을 키값 입력 : ");
  scanf_s("%d", &Key);
  if(Key == -1)
  {
   break;
  }
  if(BinarySearch(list,n,Key) == -1)
  {
   printf("없음..\n");
  }
  else
  {
   printf("있음!!\n");
  }
 }
 return 0;
}

여기서 제일중요한것은 서로 다른 숫자가 힙에 들어가야 되며 처음에 입력한 데이터 값 만큼

데이터 개수가 정해 졌다.

저도 여기서 다시 안 사실인데 랜덤 함수 테이블은 정해져있다라는 사실 이것은 프로그램을

실행 후 그 프로그램을 끄지 않고 다시 실행하면 똑같은 값들이 나온다는 사실이다.

그래서 srand(time(NULL))을 통해서 시간에 따라 이 테이블이 바뀌도록 해야한다.