알고리즘공부
알고리즘의 기초(1) - 선택정렬, 버블정렬 그리고 삽입정렬
스마라그드
2020. 2. 2. 16:19
시간복잡도 O의 개념이해
세가지 정렬법 모두 O(N^2)
1) 선택정렬
- 배열을 순회하면서 전체 원소중 가장 작은 것을 앞으로 보냄
int main(void){
int i, j ,min, index, temp;
int array[10] = {1,3,2,4,5,6,8,7,10,9};
//배열을 순회
for(i=0;i<10;i++){
min=9999;//배열내 숫자보다 더 큰 숫자
//i번째 원소를 가장앞으로 보내기
for(j=i;j<10;j++){
if(min>array[j]){
min =array[j];
index = j;
}
}
temp = array[i];
array[i] = array[index];
array[index] = temp;
//i번째 원소를 가장앞으로 보내기
}
for(i =0; i<10;i++){
printf("%d ", array[i]);
}
return 0;
}
2) 버블정렬
- 배열을 순회하면서 I 번째의 원소와 그 다음 원소를 비교하여 변경
int main(void){
int i, j , temp;
int array[10] = {1,3,2,4,5,6,8,7,10,9};
for(i=0;i<10;i++){
for(j=0;j<9-i;j++){
if(array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
for(i =0; i<10;i++){
printf("%d ", array[i]);
}
}
3) 삽입정렬
- 배열을 순회하면서 I 번째의 원소와 그 앞의 원소에 들어갈 위치를 비교하여 정렬
- 선택정렬, 버블정렬과 달리 배열을 모두 순회할 필요가 없음
- 특수한 경우(이미 정렬이 된 상태에서) 정렬할 경우 연산 속도가 매우 빨라짐;
int main(void){
int i, j ,temp;
int array[10] = {1,3,2,4,5,6,8,7,10,9};
for(i=0;i<9;i++){
j = i;
while(array[j]>array[j+1]){
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
for(i = 0; i<10;i++){
printf("%d ", array[i]);
}
return 0;
}