7. sorting

Post on 21-Mar-2017

149 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

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 /(-) )/)-

top related