소스의 문제점과 이동횟수 출력하기 위한 소스를 입력하고 싶습니다.?
소녀틳향기
질문 제목 : 소스의 문제점과 이동횟수 출력하기 위한 소스를 어디에 추가해야 하나요?
질문 요약 :여섯가지 정렬들 출력시 아무 것도 뜨지 않는것과 이동횟수를 출력하기 위한 소스
질문 내용 :
밑에 것은 제가 수업시간에 배운 여섯가지 정렬들의 소스들을 끼워 넣어 만든 소스 입니다. 교수님께서 과제로 5만개의 임의의수를 입력시에 걸리는 경과시간과 이동횟수를 출력하시라고 하셨는데요. 어떻게 해야 하나요? 시간까지는 어떻게 했는데 이게 다 적고실행 시킬려고 하니까 출력이 되지 않습니다. 어떻게 된건가요? 그리고 이동횟수를 출력시키기 위해서는 어떤 소스를 입력해야 하나요?
#include stdio.h
#include stdlib.h
#include time.h
#define MAX_SIZE 50000
int list[MAX_SIZE]; /* 최대 배열 크기 */
#define SWAP(x, y, t) ( (t)=(x), (x)=(y), (y)=(t) )//x와 y를 교환
int sorted[MAX_SIZE]; // 추가 공간이 필요
void selection_sort(int list[], int n)
{
int i, j, least, temp;
for(i=0; in-1; i++)
{
least = i;//제일 작은 값을 처음 값으로 설정
for(j=i+1; jn; j++) // 최소값 탐색,바로 옆의 값과 탐색,j는 i다음 수부터 n까지
if(list[j]list[least])
least = j;//j가 least보다 작을 경우 둘을 서로 교환
SWAP(list[i], list[least], temp); //swap 교체,메모리가 필요하기에 temp사용
}
}
void insertion_sort(int list[], int n)//삽입 정렬
{
int i, j, key;
for(i = 1; i n; i++)
{
key = list[i];
for(j = i-1; j = 0 && list[j] key; j--)
list[j+1] = list[j];
list[j+1] = key;
}
} // gap 만큼 떨어진 요소들을 삽입 정렬 // 정렬의 범위는 first에서 last
void inc_insertion_sort(int list[], int first, int last, int gap)
{
int i, j, key;
for(i=first+gap; i=last; i=i+gap)
{
key = list[i];
for(j=i-gap; j=first && keylist[j];j=j-gap)
list[j+gap]=list[j];
list[j+gap]=key;
}
} //
void shell_sort( int list[], int n ) // n = size
{
int i, gap;
for( gap=n/2; gap0; gap = gap/2 )
{
if( (gap%2) == 0 )
gap++;
for(i=0;igap;i++) // 부분 리스트의 개수는 gap
inc_insertion_sort(list, i, n-1, gap);
}
}
void bubble_sort(int list[], int n)
{
int i, j, temp;
for(i=n-1; i0; i--)
{/*i는 개수인데 비교가 끝날시 끝난 값을 하나 제외하고 다시 시작(i는 비교하는 숫자의 갯수) */
for(j=0; ji; j++)/* j는 비교하는 횟수*/
/* 앞뒤의 레코드를 비교한 후 교체 */
if(list[j]list[j+1])
SWAP(list[j], list[j+1], temp);
}
}
void merge(int list[], int left, int mid, int right)
{
int sorted[MAX_SIZE];
int i, j, k, l;
i=left;
j=mid+1;
k=left;
/* 분할 정렬된 list의 합병 */
while(i=mid && j=right)
{
if(list[i]=list[j])
sorted[k++] = list[i++];
else
sorted[k++] = list[j++];
}
if(imid)/* 남아 있는 레코드의 일괄 복사 */
for(l=j; l=right; l++)
sorted[k++] = list[l];
else/* 남아 있는 레코드의 일괄 복사 */
for(l=i; l=mid; l++)
sorted[k++] = list[l];
/* 배열 sorted[]의 리스트를 배열 list[]로 재복사 */
for(l=left; l=right; l++)
list[l] = sorted[l];
}
void merge_sort(int list[], int left, int right)
{
int mid;
if(leftright)
{
mid = (left+right)/2; /* 리스트의 균등 분할 */
merge_sort(list, left, mid); /* 부분 리스트 정렬 */
merge_sort(list, mid+1, right); /* 부분 리스트 정렬 */
merge(list, left, mid, right); /* 합병 */
}
}
int partition(int list[], int left, int right)
{
int pivot, temp;
int low,high;
low = left;
high = right+1;
pivot = list[left];
do {
do
low++;
while(low=right &&t &&list[low]pivot);
do
high--;
while(high=left && list[high]pivot);
if(lowhigh) SWAP(list[low], list[high], temp);
} while(lowhigh);
SWAP(list[left], list[high], temp);
return high;
}
void partition_sort(int list[],int left,int right)
{
if(leftright)
{
int q=partition(list,left,right);
partition_sort(list,left,right);
partition_sort(list,left,q-1);
}
}
void check_time()
{
int i,n=1;
double start1,start2,start3,start4,start5,start6,finish1,finish2,finish3,finish4,finish5,finish6;
while(n7)
{
if(n==1)
start1=clock();
else if(n==2)
start2=clock();
else if(n==3)
start3=clock();
else if(n==4)
start4=clock();
else if(n==5)
start5=clock();
else
start6=clock();
for(i=0; iMAX_SIZE; i++)
{ /* 난수 생성 및 출력 */
list[i] = rand()%MAX_SIZE;/*난수 발생 범위 0~MAX_SIZE*/
}
if(n==1)
bubble_sort(list,MAX_SIZE);
else if(n==2)
selection_sort(list,MAX_SIZE);
else if(n==3)
insertion_sort(list,MAX_SIZE);
else if(n==4)
shell_sort(list,MAX_SIZE);
else if(n==5)
merge_sort(list,0,n-1);
else
partition_sort(list,0,MAX_SIZE);
if(n==1)
finish1=clock();
else if(n==2)
finish2=clock();
else if(n==3)
finish3=clock();
else if(n==4)
finish4=clock();
else if(n==5)
finish5=clock();
else
finish6=clock();
n++;
}
for(i=0; i7; i++)
{
printf(bubble_sort time : %.3f\n,(finish1-start1)/100);
printf(selection_sort time : %.3f\n,(finish2-start2)/100);
printf(insertion_sort time : %.3f\n,(finish3-start3)/100);
printf(shell_sort time : %.3f\n\n,(finish4-start4)/100);
printf(merge_sort time : %.3f\n\n,(finish5-start5)/100);
printf(partition_sort time : %.3f\n\n,(finish6-start6)/100);
}
}
void main()
{
check_time();
return ;
}