7. sorting
TRANSCRIPT
L U > U �@ �
EB9A�6�: U ; �EU ]L [
Introduction to Sorting
h�� D [ U
� � � � � �k
데이터를�특정한�조건에�따라�일정한�순서가�되도록�
다시�배열하는�일
� y� � �k
� �bl� s� �� �bl
1� � �
1� �t � � � ��
� L 1� � � � �
h�� D [ U
이름 학번 주소 연락처
필드 필드 필드 필드 키(key) 레코드
� � 1� L � �y � �
� p � b�y �
s� �
� �
� � p � �
� � p �
� � � � � �
� � p �
� � � � � � � �
� � � � � p � �
� �� U[L UHS� [ U �
� � v� � � � �v � �
� L [L UHS� [ U �
p� � v� � � � �v �
h�D [ U �7S [
� 1�y �DLSL [ U�D [ U � �
#define SWAP(x, y, t) ((t) = (x), (x)=(y), (y)=(t))
void swap(x, y) { int t = x; x = y; y = t;}
void swap(*x, *y) { int t = *x; *x = *y; *y = t;}
r 1� � b � � � H U� w � p�
mr � �j y
y � �
� � �b � � � �b � � � � �
� � � � � �qd �qd � � � � �
� �y � � � �mr�qd � y � �
� 1�h�DLSL [ U�D [ U � �
, / (
� �mr
y � �
� � �b � � � �b � � � � �
� � � � � �qd �qd � � � � �
� �y � � � �mr�qd � y � �
� 1�h�DLSL [ U�D [ U � �
, /(
� �mr
문제점?): 정렬 대상 수 만큼의 추가 저장 공간이 필요 � �qd � � 5�
U SH L� [ U
,/(
y � �
� � �b � � � �b � � � � �
� � � � � �qd �qd � � � � �
� �y � � � �mr�qd � y � �
� 1�h�DLSL [ U�D [ U � �
, /(
� �mr
문제점?): 정렬 대상 수 만큼의 추가 저장 공간이 필요 � �qd � � 5�
U SH L� [ U
,/(
y � �
� � �b � � � �b � � � � �
� � � � � �qd �qd � � � � �
� �y � � � �mr�qd � y � �
� 1�h�DLSL [ U�D [ U � �
, /(
� �mr
문제점?): 정렬 대상 수 만큼의 추가 저장 공간이 필요 � �qd � � 5�
U SH L� [ U
, /(
y � �
� � �b � � � �b � � � � �
� � � � � �qd �qd � � � � �
� �y � � � �mr�qd � y � �
� 1�h�DLSL [ U�D [ U � �
, /(
� �mr
문제점?): 정렬 대상 수 만큼의 추가 저장 공간이 필요 � �qd � � 5�
U SH L� [ U
, /(
p � � �
� 1� pDLSL [ U�D [ U � �
� � � � � � � � �
� � � �9 � � � �9 � �
� � � � � � � �9 � � � � �� � � �
� � � � � � w � � �5� � � �� s �
M � SL �K � SL 4 M� ��������
� � � � y
� 1� � �DLSL [ U�D [ U � �
� � 1� �
� 1� LSL [ UD [�
� ) 1� � � � � � � �
void selectionSort(int arr[], int n) { int idx;for(int i = 0; i < n-1; i++) {idx = i;for(int j=i+1; j < n; j++)if(arr[j]<arr[idx]) idx = j;
swap(&arr[i], &arr[idx]); }
}
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, / (
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
,/ (
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
,/ (
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, /(
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, /(
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, /(
U SH L� [ U
/, (
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, /(
U SH L� [ U
/, (
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, /(
U SH L� [ U
/, (
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, /(
U SH L� [ U
/, (
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, /(
U SH L� [ U
/,(
y � �
� � � y� � � r� � � �t ��
� � � � � � � � � �
�
� 1�h�?U L [ U�D [ U � �
� �mr
, /(
U SH L� [ U
/,(
데이터를 옮겨야 할 때 제일 먼저 발생하는 위치는?� �
1� p?U L [ U�D [ U � �
p � � �� � � �
� � � � � � �
w � � � � � � � s�
w � � � � � � � ��
w � � � � � � �
� � � � � � w � � �5� � � �� �
M � SL �K � SL 4 M� ��������
� � � � y
1� �?U L [ U�D [ U � �
� � 1� �
� 1�?U L [ UD [�
� ) 1� � � � � � � �
void insertionSort(int arr[], int n) { int j, new; ��UL 1� � � �Q1� � � � �e� �
for(int i = 1; i < n-1; i++) {j= i-1;new = arr[i];while(j >= 0 && arr[j] > new) {arr[j+1] = arr[j];
j--;}
}}
arr[j] = new;
� � � � y
1� �?U L [ U�D [ U � �
� � 1� �
� 1�?U L [ UD [�
� ) 1� � � � � � � �
void insertionSort(int arr[], int n) { int j, new; ��UL 1� � � �Q1� � � � �e� �
for(int i = 1; i < n-1; i++) {j= i-1;new = arr[i];while(j >= 0 && arr[j] > new) {arr[j+1] = arr[j];
j--;}
}}
arr[j] = new;
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, (
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, (
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, ( , / (
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, ( , / ( , / (
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, ( , / ( , /(
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, ( , / ( , /(
, ( /
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, ( , / ( , /(
, ( / , ( /
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, ( , / ( , /(
, ( / ,( /
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, ( , / ( , /(
, ( / ,( /
,( /
y � �
� � � y� � � �h � � s�
yb� � � � � �s � s s �r �
� 1�h�8 IISL�D [ U � �
/, ( , / ( , /(
, ( / ,( /
,( /
� � � � y
� 1� �8 IISL�D [ U � �
� � 1� �
� 1�I IISLD [�
� ) 1� � � � � � � �
void bubbleSort(int arr[], int n) {for(int i = n-1; i > 0; i—) {for(int j=0; j < i; j++){if(arr[j]<arr[j+1])swap(&arr[j], &arr[j+1]);
} }
}
y � �
� � � m� � � ��
� � � �> g � � ” �
� � � � � � ” �
� � �u dl �f � � � � �c� � � ���
� � � � � b� � z �o �
� 1�h�D LSS�D [ U � �
/ (,
y � �
� � � m� � � ��
� � � �> g � � ” �
� � � � � � ” �
� � �u dl �f � � � � �c� � � ���
� � � � � b� � z �o �
� 1�h�D LSS�D [ U � �
/(,
y � �
� � � m� � � ��
� � � �> g � � ” �
� � � � � � ” �
� � �u dl �f � � � � �c� � � ���
� � � � � b� � z �o �
� 1�h�D LSS�D [ U � �
/( ,
y � �
� � � m� � � ��
� � � �> g � � ” �
� � � � � � ” �
� � �u dl �f � � � � �c� � � ���
� � � � � b� � z �o �
� 1�h�D LSS�D [ U � �
/( ,
y � �
� � � m� � � ��
� � � �> g � � ” �
� � � � � � ” �
� � �u dl �f � � � � �c� � � ���
� � � � � b� � z �o �
� 1�h�D LSS�D [ U � �
/( ,
/( ,
� � � � y
� 1� �D LSS�D [ U � �
� � 1� �
� 1� LSSD [�
� ) 1� � � � � � � �
void shellSort(int arr[], int n) {for(int i = n-1; i > 0; i--) {for(int j=0; j < i; j++){if(arr[j]<arr[j+1])swap(&arr[j], &arr[j+1]);
} }
}
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
) ( () ) (), ))(,
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
)( () ) ( ), ))(,
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
)( () ) ( ), ))(,
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
)
(
() ) ( ), ))(,
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
)
( ()
) ( ), ))(,
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
)
( () )
( ), ))(,
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
)( () )
( ), ))(,
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
)( () ) ( ),))(,
y � �
� � h �v � y � p� � � � �
� � K ] KLK�HUK� U L � �
� > � � � � � � o�hl � � � �
)� �i �: � � � �p �i � � o)�p �i � � �> )� �p �i � �i �
� 1�h�BL L�D [ U � �
) ( () ) ))(,(),
) ( () ) ))(,(),
)( () )( ),))(,
� 1� pBL L�D [ U � �
p� �h b�(hb� � z �g � y � � �
� � � � � � z � �
� � � �
� � �
[H [ LUK [H [ LUK
[H [ LUK [H [ LUK
mergeSort() mergeSort()
merge()
mergeSort() mergeSort()
merge()
K K (
K K (
[H [ LUK [H [ LUKK K (
[H [ LUKK
[H [LUK
[H [LUK
merge()merge()merge()
� 1� �BL L�D [ U � �
� � � �� � 1� �
� 1� L L U[�S [FG � U[� [H [ � U[� K � U[�LUK 2�
� + 1� � � � � � � � �
�������� � � � � � � � � � � � �
int tempSorted[MAX_LIST_SIZE];void merge(int list[], int start, int mid, int end) {int i = start, j = mid+1, k = 0;while (i <= mid && j <= end) {if (list[i] <= list[j])tempSorted[k++] = list[i++];
else tempSorted[k++] = list[j++];
}if (i > mid)for (i = j; i <= end; i++) tempSorted[k++] = list[i];
elsefor (j = i; j <= mid; j++) tempSorted[k++] = list[j];
for (i = start, k = 0; i <= end; i++) list[i] = tempSorted[k++];}
� 1� �BL L�D [ U � �
� � � � y
� � 1� �
� 1� L LD [ U[�S [FG � U[� [H [ � U[�LUK 2�
� 1� � � � � � � � � �
void mergeSort(int list[], int start, int end) {
if (start < end) { int mid = (start + end)/2; mergeSort(list, start, mid); mergeSort(list, mid+1, end); merge(list, start, mid, end); } return;}
y � �
� � K ] KL�HUK� U L � �xi�
� �“t � � � �p � � � � � �
�p � � � �
� 1�h�C �D [ U � �
, / + )-(0
] [
y � �
� � K ] KL�HUK� U L � �xi�
� �“t � � � �p � � � � � �
�p � � � �
� 1�h�C �D [ U � �
, / + )-(0
) + /-0(,
� ] [ � �e � ] [ � �e
] [
y � �
� � K ] KL�HUK� U L � �xi�
� �“t � � � �p � � � � � �
�p � � � �
� 1�h�C �D [ U � �
, / + )-(0
) + /-0(,
) + /-0( ,
� ] [ � �e � ] [ � �e
] [
� ] [ � �e � ] [ � �e
p
� 1� pC �D [ U � �
/ + )-(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/ + )-(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/ + )-(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/
+ )-(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -(0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -(
0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -( 0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -( 0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -( 0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -
(
0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
p
� 1� pC �D [ U � �
/+) -( 0
S 1� � � � � � ] [� � �e � � �
1� � � � ] [� � �e � �
S
,
� 1� pC �D [ U � �
+)( 0
S
, /-
p
� 1� pC �D [ U � �
+)( 0
S
, /-
p
� 1� pC �D [ U � �
+)( 0
S
, /-
p
� 1� pC �D [ U � �
+)( 0
S S
, /-
p
� 1� pC �D [ U � �
+)( 0
S S
, /-
p
� 1� pC �D [ U � �
+)( 0
S S
, /-
p
� 1� pC �D [ U � �
+)( 0
S S
, /-
p
� 1� pC �D [ U � �
+)(
0
S S
, /-
p
� 1� pC �D [ U � �
+)( 0
S S
, /-
p
� 1� pC �D [ U � �
+)( 0, /-
S S
+)( 0
S S
, /-
p
� 1� pC �D [ U � �
+)( 0, /-
S S
+)( 0
S S
, /-
p
� 1� pC �D [ U � �
+)( 0, /-
S S
+)( 0
S S
, /-
p
� 1� pC �D [ U � �
+)( 0, /-
S S
+)( 0, /-
+)( 0
S S
, /-
p
�S �e � �e � � � � �
. �0-2 �9 � �9 � � � � �9 � � �
,- , �0-2 9 � �9 � � � � �9 � � �
. �9 �,- , �9 � �
� �e � ] [ �er�s
� 1� �C �D [ U � �
� � 1� �e� ] [� �
� 1� ] [< UK U[�S [FG � U[� [H [ � U[�LUK 2�
� 1� � �� � � � � � � �
� � � ] [� � y
int pivotFind(int list[], int start, int end) {
int pivot = list[start], low = start+1, high = end; do { while (low <= high && list[low] < pivot) low++; while (low <= high && list[high] > pivot) high--; if (low < high) swap(&list[low], &list[high]); }while(low < high);
swap(&list[start], &list[high]); return high;}
� 1�� �C �D [ U � �
� � � � y
� � 1� �
� 1� D [ U[�S [FG � U[� [H [ � U[�LUK 2�
� 1� � � � � � � � � �
void quickSort(int list[], int start, int end) {
if (start < end) { int pivotPosition = pivotFind(list, start, end); quickSort(list, start, pivotPosition-1); quickSort(list,pivotPosition+1, end); }}
1�S I H �M U [ UC �D [ U � �
void qsort( void *base, size_t num, size_t width,int (*compare) (const void *, const void *)
);
� [H [�HKK L � M�HU�H H
�[ L�U IL � M�LSL LU[ � M�HU�H H
� aL� M�[ L�LSL LU[� M�HU�H H � � U�I [L �
� H L�M U [ U�[ H[� H L �[ �LSL LU[ �HUK� L[ U � U[L L �]HS L
�KL]LS L � SK� SL LU[�[ � H L�M U [ U
�� L[ U�]HS L �
����3� �1� LU�LSL LU[�(� �SL �[ HU�LSL LU[�)�
������� �1� LU�LSL LU[�(�L HS �[ �LSL LU[�)�
����4� �1� LU�LSL LU[�(� � LH[L �[ HU�LSL LU[�)
(
)
+
,
-
/
0
y � �
� � s� � � p� � �
� b � � � � � � � � ��
� � � � � � � ��
y � HK � � � �k � �e � � �
y � � o� � o � � � �h �
y � 1��h�HK �D [ U � y �
/ ) ,
(
)
+
,
-
/
0
y � �
� � s� � � p� � �
� b � � � � � � � � ��
� � � � � � � ��
y � HK � � � �k � �e � � �
y � � o� � o � � � �h �
y � 1��h�HK �D [ U � y �
/
)
,
(
)
+
,
-
/
0
y � �
� � s� � � p� � �
� b � � � � � � � � ��
� � � � � � � ��
y � HK � � � �k � �e � � �
y � � o� � o � � � �h �
y � 1��h�HK �D [ U � y �
/
) ,
(
)
+
,
-
/
0
y � �
� � s� � � p� � �
� b � � � � � � � � ��
� � � � � � � ��
y � HK � � � �k � �e � � �
y � � o� � o � � � �h �
y � 1��h�HK �D [ U � y �
/) , /) ,
y � 1�� pHK �D [ U � y �
� � � � z � � �
� � � � �p �( � � �
�p �( � � � � � �
p
(
)
+
,
-
/
0
)/ 0 0 /( -) ) / )-
y � 1�� pHK �D [ U � y �
� � � � z � � �
� � � � �p �( � � �
�p �( � � � � � �
p
(
)
+
,
-
/
0
)/
0
0
/( -) ) / )-
y � 1�� pHK �D [ U � y �
� � � � z � � �
� � � � �p �( � � �
�p �( � � � � � �
p
(
)
+
,
-
/
0
)/
0
0
/(
-))
/ )-
y � 1�� pHK �D [ U � y �
� � � � z � � �
� � � � �p �( � � �
�p �( � � � � � �
p
(
)
+
,
-
/
0
)/
0
0
/(
-))
/
)-
(
)
+
,
-
/
0
y � 1�� pHK �D [ U � y �
� � � � z � � �
� � � � �p �( � � �
�p �( � � � � � �
p
(
)
+
,
-
/
0
)/0 0/( -) ) /)-
(
)
+
,
-
/
0
y � 1�� pHK �D [ U � y �
� � � � z � � �
� � � � �p �( � � �
�p �( � � � � � �
p
(
)
+
,
-
/
0
)/
0
0
/(
-)
)
/
)-
(
)
+
,
-
/
0
y � 1�� pHK �D [ U � y �
� � � � z � � �
� � � � �p �( � � �
�p �( � � � � � �
p
(
)
+
,
-
/
0
)/ 00 /(-) )/)-