HolaJun

35 object(s)
 

Bubble_sort

버블 정렬(Bubble Sort)

순서

  1. 두 번째 인덱스부터 시작해, 현재 인덱스 값과 이전 인덱스 값을 비교.
  2. 이전 인덱스가 더 크다면 현재 인덱스와 Swap, 현재 인덱스가 더 크다면 다음 두 연속된 인덱스값 비교.
  3. (전체 배열의 크기 - 현재 순환한 바퀴수) 만큼 반복

시간복잡도

버블 정렬의 시간복잡도는 O(N^2)

공간복잡도

하나의 배열에서만 진행하므로 O(n)

코드

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

# define MAX_SIZE 25
# define RAND_RANGE 100


// 난수에 매번 다른 시드를 주기 위한 함수 
void seed_init() {
	srand((unsigned int)time(NULL));
} 

// 난수 발생 함수 
void random_number(int *array, int length) {
	bool overlapCheck = false; // 원소값 중복체크 변수 
	 
	for(int i=0; i<length; i++) {
		while(true) {
			array[i] = (rand()%RAND_RANGE)+1;
			overlapCheck = false;
			
			for(int j=0; j<i; j++) {
				if(array[j] == array[i]) {
					overlapCheck = true;
					break;
				}
			}
			if(!overlapCheck) {
				break;
			}
		}	
	}	
}

// 버블 정렬 
void bubble_sort(int *array, int length) {
	int i, j, temp;
	
	random_number(array, length);
	
	printf("정렬 전: ");
	for(i=0; i<length; i++) {
		printf("%d ", array[i]);
	}
	
	for(i=0; i<length; i++) {
		for(j=0; j<(length-1)-i; j++) {
			if(array[j] > array[j+1]) {
				temp = array[j];
				array[j] = array[j+1];
				array[j+1] = temp;
			}
		}
	}
	
	printf("\n정렬 후: ");
	for(i=0; i<length; i++) {
		printf("%d ", array[i]);
	}
	
	
}

int main() {
	clock_t second = 0;
	int data[MAX_SIZE] = {};
	int length = sizeof(data)/sizeof(int); // 배열의 크기
	seed_init();
	
	second = (int)clock();
	printf("\n\nBubble Sort\n");
	bubble_sort(data, length);
	printf("\n데이터 %d개의 정렬 수행시간: %0.4f초\n", MAX_SIZE, (float)(clock() - second) /CLOCKS_PER_SEC);   //요기까지 걸린 시간은?


	return 0;
}

결과

bubble_sort {:.alignleft}