quick정렬 수행시간 구하기
안찬
quick정렬 수행시간 구하기quick정렬 수행시간 구하기질문 내용 : 어찌어찌해서 퀵정렬가지는 구현을 했는데요 퀵정렬 수행시간을 구해야 하는데요
퀵정렬이 재귀함수라 계속 자기 호출을 하는 바람에 시간시작과 끝을 어디에다가 둬야 할지 모르겠네요
시간재는 함수로 gettickcount함수 사용하고 있는데요
메인에서 퀵정렬함수 호출하기전에 start변수로 그다음에 퀵정렬 끝나면 end변수로 시간재서 뺴서
프린트문으로 찍어내고 있는데요 이게 0초 0초 막이러다가 가끔 15초 이렇게 뜨고 다시 0 초 0초 막이러다가 15초 뜨고
이러거든요
아래가 메인에서 퀵정렬 호출하는 부분입니다
while(sort5!=100) {
start=gettickcount();
quick_sort(list,0,9999);
end=gettickcount();
t=(end-start);
printf(퀵정렬의 수행시간은 :%d millisec입니다\n,t);
sort5++;}
100번반복하는 이유는 교수님이 100번정도 수행해서 평균시간하고 최악수간 구해라고 해서 반복하는거구요
프린트문이 찍어질때마다 부분퀵함수 (즉 재귀된 퀵함수) 시간이 아니라 전체 정렬이 다끝난 퀵함수의 시간을
보고싶으면 어떻게 해야 하는지 알려주세요//좀비님 전체소스입니다 (지금 배운정렬들 다구현하고있어서요)
#includestdio.h
#includetime.h
#includestdlib.h
#includewindows.h#define swap(x,y,z) ((z)=(x),(x)=(y),(y)=(z))
int start;
int end;
int t;
void select_sort(int list[]);
void insert_sort(int list[]);
void bubble_sort(int list[]);
int partition(int list[], int x, int y);
void quick_sort(int list[],int x,int y);
void merge_sort(int list[], int x, int y);
int main(void){
srand(unsigned int (time));
int choice;
int list[10000];
int sort1=0;
int sort2=0;
int sort3=0;
int sort4=0;
int sort5=0;
int sort6=0;
for(int i=0; i10000; i++)
list[i]=rand()%30000;
first:
printf(어떤 방법으로 정렬할까요?\n);
printf(1.선택정렬\n);
printf(2.삽입정렬\n);
printf(3.버블정렬\n);
printf(4.병합정렬\n);
printf(5.퀵정렬\n);
printf(6.힙정렬\n);
printf(7.정렬된배열보기\n);
printf(8.종료\n);
scanf(%d,&choice);
switch (choice) {
case 1:
while (sort1!=100) {
select_sort(list);
sort1++;
}
goto first;
break;
case 2:
while (sort2!=100) {
for(int i=0; i10000; i++)
list[i]=rand()%100000;
insert_sort(list);
sort2++;
}
goto first;
break;
case 3:
while (sort3!=100) {
bubble_sort(list);
sort3++;
}
goto first;
break;
case 4:
goto first;
break;
case 5:
while(sort5!=100) {
start=gettickcount();
quick_sort(list,0,9999);
end=gettickcount();
t=(end-start);
printf(퀵정렬의 수행시간은 :%d millisec입니다\n,t);
sort5++;
}
goto first;
break;
case 6:
goto first;
break;
case 7:
for(int i=0; i10000; i++)
printf(%d\n,list[i]);
goto first;
break;
case 8:
exit(1);
break;
}
return 0;
}
void select_sort(int list[]){
int i;
int j;
int least;
int temp;
start=gettickcount();
for(i=0; i9999; i++){
least=i;
for(j=i+1; j10000; j++)
if(list[j]list[least])
least=j;
swap(list[i],list[least],temp);
}
end=gettickcount();
t=(end-start);
printf(선택정렬의 수행시간은 :%d millisec입니다\n,t);
}
void insert_sort(int list[]){
int i;
int j;
int temp;
start=gettickcount();
for(i=1; i10000; i++){
temp=list[i];
j=i;
while(templist[j-1] && j0){
temp=list[j-1];
list[j-1]=list[j];
list[j]=temp;
temp=list[j-1];
j--;
}
}
end=gettickcount();
t=(end-start);
printf(삽입정렬의 수행시간은 :%d millisec입니다\n,t);
}
void bubble_sort(int list[]) {
int i;
int j;
int temp;
mp;
start=gettickcount();
for(i=0; i9999; i++){
temp=list[0];
for(j=0; j10000-i; j++){
if(list[j+1]temp)
swap(list[j],list[j+1],temp);
}
}
end=gettickcount();
t=(end-start);
printf(버블정렬의 수행시간은 :%d millisec입니다\n,t);
}
int partition(int list[],int left,int right){
int low;
int high;
int temp;
int pivot;
low=left+1;
high=right;
pivot=(left+high)/2;
while(lowhigh){
while(low high && list[low] list[pivot]){
low++;
}
while(low high && list[high] = list[pivot]){
high--;
}
if(lowhigh) {
swap(list[low],list[high],temp);
low++;
high--;
}
}
swap(list[pivot],list[low],temp);
return low;
}
void quick_sort(int list[], int x, int y) {
int left;
int right;
int recall;
left=x;
right=y;
if(leftright){
recall=partition(list,left,right);
quick_sort(list, left, recall-1);
quick_sort(list, recall+1, right);
}
}
-
콩알눈
case1은 선택정렬인데 선택정렬은 잘됍니다
그리고 소스에서도 보면 알듯이 메인에서 퀵정렬 함수호출하기전이랑 호출후에 시간쟀는데도 안돼네요
함수안에서 재는게 아니라요 다른건 말고 퀵정렬만요 -
Sweet
함수 내에서 수행시간을 재지 말고 함수를 호출하는 곳에서 재는 것이 좋습니다.
case 1:
while (sort1!=100) {
select_sort(list);
sort1++;
}
위와 같이 반복하는 것은 의미없습니다.
한번 정렬하고 나면 이미 정렬된 상태인데 여기서 정렬하려고 하는 것은 알고리즘에 따라서 천양지차의 결과를 보이게 됩니다.
특히 퀵소트의 경우에는 정렬된 것을 퀵소트하려고 하면 더 느린 결과를 보이기도 합니다. -
율아
글 수정했습니다
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |