<div>#include<stdio.h><br />#include<stdlib.h><br />#include<time.h></div> <div>#define n 1000000</div> <div>void makeArray(int *a,int *b,int *c,int *a1,int *b1,int *c1);<br />void quickSort(int *Array,int Limit);<br />void qSort(int *Array,int l,int r,int Limit);<br />void mergeSort(int *Array , int l ,int r);<br />void copy(int *a,int *b);<br />void revers(int *a,int *b);<br />void merge(int *Array , int l,int m,int r);</div> <div><br />int main()<br />{<br /> int i;<br /> int a[n]={NULL,},b[n]={NULL,},c[n]={NULL,},a1[n]={NULL,},b1[n]={NULL,},c1[n]={NULL,};<br /> makeArray(a,b,c,a1,b1,c1);<br /> clock_t start,end,time;<br /> start=clock();<br /> quickSort(a,0);<br /> end=clock();<br /> time = end - start;<br /> printf("무작위리스트 퀵정렬 소요시간: %f\n",(double)time/CLOCKS_PER_SEC);<br /> start=clock();<br /> quickSort(b,0);<br /> end=clock();<br /> time = end - start;<br /> printf("정순리스트 퀵정렬 소요시간: %f\n",(double)time/CLOCKS_PER_SEC);<br /> start=clock();<br /> quickSort(c,0);<br /> end=clock();<br /> time = end - start;<br /> printf("역순리스트 퀵정렬 소요시간: %f\n\n\n",(double)time/CLOCKS_PER_SEC);<br /> start=clock();<br /> mergeSort(a1, 0 , n-1);<br /> end=clock();<br /> time = end - start;<br /> printf("무작위리스트 합병정렬 소요시간: %f\n",(double)time/CLOCKS_PER_SEC);<br /> start=clock();<br /> mergeSort(b1, 0 , n-1);<br /> end=clock();<br /> time = end - start;<br /> printf("정순리스트 합병정렬 소요시간: %f\n",(double)time/CLOCKS_PER_SEC);<br /> start=clock();<br /> mergeSort(c1, 0 , n-1);<br /> end=clock();<br /> time = end - start;<br /> printf("역순리스트 합병정렬 소요시간: %f\n",(double)time/CLOCKS_PER_SEC);<br /> <br /> <br /> <br /> <br /> return 0;<br />}</div> <div>void makeArray(int *a,int *b,int *c,int *a1,int *b1,int *c1)<br />{<br /> int i;<br /> srand(time(NULL));<br /> for(i=0; i < n; i++)<br /> {<br /> a[i] = rand()%100+1;<br /> b[i] = a[i];<br /> }<br /> quickSort(b,50);<br /> revers(b,c);<br /> copy(a,a1);<br /> copy(b,b1);<br /> copy(c,c1);<br /> return;<br />}</div> <div>void quickSort(int *Array,int Limit)<br />{<br /> qSort(Array,0,n-1,Limit);<br /> return;<br />}</div> <div>void qSort(int *Array,int l,int r,int Limit)<br />{<br /> int p = Array[r];<br /> int i=l , j=r;<br /> while(i<j)<br /> {<br /> <br /> while((i<j) && (Array[i]<=p))<br /> {<br /> i++;<br /> }<br /> <br /> if(i != j)<br /> {<br /> Array[j] = Array[i];<br /> j--;<br /> }<br /> while((i<j) && (Array[j]>=p))<br /> {<br /> j--;<br /> }<br /> if(i != j)<br /> {<br /> Array[i] = Array[j];<br /> }<br /> }<br /> Array[i]=p;<br /> p=i;<br /> if(r-l < Limit)<br /> {<br /> return;<br /> }<br /> if (l < p)<br /> {<br /> qSort(Array, l, p - 1,Limit);<br /> }<br /> if (r > p)<br /> {<br /> qSort(Array, p+1, r,Limit);<br /> }<br /> <br /> return;<br />}</div> <div>void copy(int *a,int *b)<br />{<br /> int i;<br /> for(i=0; i<n; i++)<br /> {<br /> b[i]=a[i];<br /> }<br /> return;<br />}<br />void revers(int *a,int *b)<br />{<br /> int i;<br /> for(i=0; i<n; i++)<br /> {<br /> b[n-i-1]=a[i];<br /> }<br /> return;<br />}</div> <div>void mergeSort(int *Array , int l ,int r)<br />{<br /> if(l<r)<br /> {<br /> int m = (l+r)/2;<br /> mergeSort(Array , l ,m);<br /> mergeSort(Array,m+1,r);<br /> merge(Array,l,m,r);<br /> }<br /> return;<br />}</div> <div>void merge(int *Array , int l,int m,int r)<br />{<br /> int B[n] = {NULL,};<br /> int i=l,k=l;<br /> int j=m+1;<br /> while(i <= m && j<= r)<br /> {<br /> if(Array[i] <= Array[j])<br /> {<br /> B[k++] = Array[i++];<br /> }<br /> else<br /> {<br /> B[k++] = Array[j++];<br /> }<br /> }<br /> while(i<=m)<br /> {<br /> B[k++] = Array[i++];<br /> }<br /> while(j<=r)<br /> {<br /> B[k++]=Array[j++];<br /> }<br /> for(k=l; k <= r; k++)<br /> {<br /> Array[k] = B[k];<br /> }<br /> return;<br />}</div> <div>//제 과제인데 이게 한 1~2만개에선 잘나오는데 10만개 넘어가면 그냥 아무키나 누르라고 밖에 안뜨더라구요....다른컴퓨터에선 어떨까 해서..이거좀 실행해주세요</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.