버블정렬 알고리즘의 성능 개선 관련 질문입니다
무크
질문 제목 : 버블정렬 알고르즘의 성능 개선(한 단계에서 더이상 교환이 없으면 이미 정렬된 것이므로 알고리즘을 종료)
버블정렬 알고리즘은 주어졌는데 어떻게 수정해야지 개선되고 또 몇번째 데이터에서 종료된건지 출력해야되는데
책 이것저젓 찾아봐도 어떻게 할찌 잘모르겟네여
질문 내용 : 이알고리즘을 개선해야 됩니다
#include stdio.h
#include stdlib.h
#include time.h
#define n 10000
#define true 1
#define false 0
void swap(int a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
void checksort(int a[], int n)
{
int i, sorted;
sorted = true;
for (i=1; in; i++) {
if (a[i] a[i+1]) sorted = false;
if (!sorted) break;
}
if (sorted) printf (정렬 완료!\n);
else printf (정렬오류 발생!\n);
}void bubblesort(int a[], int n)
{
int i, j;
for(i=n; i=1; i--) {
for(j=1; ji; j++)
if (a[j] a[j+1])swap(a, j, j+1);
}
}main()
{
int i, a[n+1];
double start_time;
// 버블정렬 테스트
srand(time(null));
for (i=1; i= n; i++) a[i] = rand();
start_time = clock();
bubblesort(a, n);
printf (버블정렬의 실행시간(n=%d) : %f\n, n, (clock() - start_time)/clocks_per_sec);
checksort(a, n);}
-
아연
BubbleSort() 안에 플래그 하나 두고 스왑하는지 않아는지만 체크 하면 될것 같네요
스왑하지 않으면 for문 종료해 버리고 종료된 시점을 리턴하면 될듯도 합니다만은... 음 -_-;