์ ๋ ฌ ์ด๋ ๋ฌผ๊ฑด์ ํฌ๊ธฐ ์์ผ๋ก ์ค๋ฆ์ฐจ์์ด๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋์ด ํ ๊ฒ์ด๋ค.
๋จ์ํ์ง๋ง ๋นํจ์จ์ : ์ฝ์
, ์ ํ, ๋ฒ๋ธ ์ ๋ ฌ
๋ณต์กํ์ง๋ง ํจ์จ์ : ํต, ํํ, ํฉ๋ณ, ๊ธฐ์ ์ ๋ ฌ
์ ํ์ ๋ ฌ(selection sort)
๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํ ํด ๋งจ ์์ ์๋ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๊ณ , ๊ทธ ๋ค์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ํํด ์์์ ๋ ๋ฒ์งธ ๋ฐ์ดํฐ์ ๋ฐ๊พธ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๋ฐฉ๋ฒ
์ฃผ์ด์ง ๋ฆฌ์คํธ ์ค์ ์ต์๊ฐ์ ์ฐพ๋๋ค.
๊ทธ ๊ฐ์ ๋งจ ์์ ์์นํ ๊ฐ๊ณผ ๊ต์ฒดํ๋ค(ํจ์ค(pass)).
๋งจ ์ฒ์ ์์น๋ฅผ ๋บ ๋๋จธ์ง ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ต์ฒดํ๋ค.
Copy void selection_sort(int list[], int n){
int i, j, least,tmp;
for(i=0;i<n-1;i++){
least = i;
for(j=i+1;j<n;j++){
if(list[j]<list[least]){
least = j;
}
SWAP(list[i],list[j],tmp);
}
}
}
Copy array = [ 7 , 5 , 9 , 0 , 3 , 1 , 6 , 2 , 4 , 8 ]
for i in range ( 0 , len (array) - 1 ):
min = i;
for j in range (i + 1 , len (array)):
if array [ j ] < array [ min ]:
min = j;
array [ i ], array [ min ] = array [ min ], array [ i ] ;
print (array)
๋น๊ตํ๋ ๊ฒ์ด ์์ ์๊ฐ์ ์ด๋ฃจ์ด์ง๋ค๋ ๊ฐ์ ์๋, n๊ฐ์ ์ฃผ์ด์ง ๋ฆฌ์คํธ๋ฅผ ์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ ฌํ๋ ๋ฐ์๋ O(n^2) ๋งํผ์ ์๊ฐ ์ด ๊ฑธ๋ฆฐ๋ค. ์ด๋ ์ ๋ ฌํด์ผํ๋ ๋ฐ์ดํฐ ๊ฐ์๊ฐ 100๋ฐฐ ๋์ด๋๋ฉด ์ด๋ก ์ ์ผ๋ก ์ํ์๊ฐ์ 10,000๋ฐฐ ๋์ด๋๋ ๊ฒ์ด๋ค.
์ฝ์
์ ๋ ฌ(insertion sort)
์๋ฃ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด ๋ถ๋ถ๊ณผ ๋น๊ตํ์ฌ, ์์ ์ ์์น๋ฅผ ์ฐพ์ ์ฝ์
ํจ์ผ๋ก์จ ์ ๋ ฌ์ ์์ฑํ๋ ์๊ณ ๋ฆฌ์ฆ ์ด๋ค.
์ฝ์
์ ๋ ฌ์ ํ์ํ ๋๋ง ์์น๋ฅผ ๋ฐ๊พธ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์์ ๋ ํจ์ฌ ํจ์จ์ ์ด๋ค.
Copy void insert_sort(int arr[],int n){
int i, key, j;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i-1;
while (j >= 0 && arr[j] > key)
{
arr[j+1] = arr[j];
j = j-1;
}
arr[j+1] = key;
}
}
Copy def insert_sort ( array ):
# print(array)
for i in range ( 1 , len (array)):
for j in range (i, 0 , - 1 ):
if array [ j ] < array [ j - 1 ]:
array [ j ], array [ j - 1 ] = array [ j - 1 ], array [ j ]
else :
break
# print(array)
return array
๋ณต์ก๋
์ต์ ์ ๊ฒฝ์ฐ(์ด๋ฏธ ์ ๋ ฌ) : O(n)
์ต์
์ ๊ฒฝ์ฐ(์ญ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒฝ์ฐ) : O(n^2)
๋ณดํต ์ฝ์
์ ๋ ฌ์ด ํต ์ ๋ ฌ๋ณด๋ค ๋นํจ์จ ์ ์ด๋, ์ด๋ฏธ ์ ๋ ฌ๋์ด์๋ ๊ฒฝ์ฐ์๋ ํต์ ๋ ฌ๋ณด๋ค ๋ ๊ฐ๋ ฅํ๋ค. ๋ฐ๋ผ์ ๊ฑฐ์ ์ ๋ ฌ๋์ด ์๋ ์ํ๋ผ๋ฉด, ์ฝ์
์ ๋ ฌ์ ์ด์ฉํ๋ ๊ฒ์ด ๋ ์ข๋ค.
๋ฒ๋ธ์ ๋ ฌ(bubble sort)
์ธ์ ํ 2๊ฐ์ ๋ ์ฝ๋๋ฅผ ๋น๊ตํ์ฌ ์์๋๋ก ๋์ด ์์ง ์์ผ๋ฉด ์๋ก ๊ตํํ๋ค.
Copy void bubble_sort(int list[], int n){
int i,j,tmp;
for(i=n-1;i>0;i--){
for(j=0;j<i;j++){
if(list[i]<list[j])SWAP(list[i], list[j], tmp);
}
}
}
๋ณต์ก๋(์ต์, ํ๊ท , ์ต์
) : O(n^2)
ํฉ๋ณ ์ ๋ ฌ(merge_sort)
๋ฆฌ์คํธ๋ฅผ ๋ ๊ฐ์ ๊ท ๋ฑํ ํฌ๊ธฐ๋ก ๋ถํ ํ๊ณ ๋ถํ ๋ ๋ถ๋ถ๋ฆฌ์ํธ๋ฅผ ์ ๋ ฌํ๋ค.
์ ๋ ฌ๋ ๋๊ฐ์ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ํฉํ์ฌ ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ๋ค.
Copy void merge(int array[], int left, int mid, int right)
{
int i, j, k, m;
i = left;
j = mid + 1;
k = left; //๊ฒฐ๊ณผ ๋ฐฐ์ด์ ์ธ๋ฑ์ค
int tempArray[MAX];
//left๋ถํฐ mid ๊น์ง์ ๋ธ๋ก๊ณผ mid+1๋ถํฐ right๊น์ง์ ๋ธ๋ก์ ์๋ก ๋น๊ตํ๋ ๋ถ๋ถ
while (i <= mid && j <= right) {
if (array[i] < array[j]){ //left index ๊ฐ์ด right index ๊ฐ๋ณด๋ค ์์ผ๋ฉด left index ๊ฐ์ ๊ฒฐ๊ณผ result์ ๋ณต์ฌ
tempArray[k] = array[i];
i++;
}else{ //์๋๋ผ๋ฉด right index ๊ฐ์ ๊ฒฐ๊ณผ result์ ๋ณต์ฌ
tempArray[k] = array[j];
j++;
}
k++;
}
// left ๋ธ๋ก์ ๊ฐ์ ๋ค ์ฒ๋ฆฌ๋์๋๋ฐ right ๋ธ๋ก์ index๊ฐ ์์ง ๋จ์์์ ๊ฒฝ์ฐ
// right index๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฒฐ๊ณผ result์ ๋ณต์ฌ
if (i > mid){
for (m = j; m <= right; m++){
tempArray[k] = array[m];
k++;
}
} else { // left ๋ธ๋ก์ index๊ฐ ์์ง ๋จ์์์ ๊ฒฝ์ฐ left index๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฒฐ๊ณผ result์ ๋ณต์ฌ
for (m = i; m <= mid; m++){
tempArray[k] = array[m];
k++;
}
}
for(m = left; m <= right; m++){
array[m] = tempArray[m];
}
}
void merge_sort(int array[], int left, int right)
{
int mid;
// ๋ถํ ์ด ๋ค ๋์ง ์์์ ๊ฒฝ์ฐ if ๋ฌธ ์คํ
if(left < right){
mid = (left + right)/2;
merge_sort(array, left, mid); //์ผ์ชฝ ๋ธ๋ก ๋ถํ
merge_sort(array, mid+1, right); //์ค๋ฅธ์ชฝ ๋ธ๋ก ๋ถํ
merge(array, left, mid, right); //๋ถํ ๋ ๋ธ๋ก ๋ณํฉ
}
}
๊ธฐ์์ ๋ ฌ(Radix Sort)
๊ธฐ์ ์ ๋ ฌ์ ์ ์์ ์๋ฆฌ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฎ์ ์๋ฆฌ์๋ถํฐ ๋น๊ตํด ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
์๋ฅผ ๋ค์ด 3์๋ฆฌ ์๋ผ๋ฉด 1์์๋ฆฌ, 10์์๋ฆฌ , 100์ ์๋ฆฌ ์ซ์๋ฅผ ์์๋๋ก ๋น๊ตํด์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
Copy void radix_sort(int a[])
{
int i, b[MAX], m=0, exp=1;
// m์ ์ต๋๊ฐ์ ์ ์ฅ
for( i=0 ; i<MAX ; i++ )
{
if( a[i] > m )
m = a[i];
}
// m์ ์๋ฆฌ์๋ณด๋ค exp๊ฐ ์ปค์ง๋ฉด ์ข
๋ฃ
while( m/exp > 0 )
{
int bucket[10] = {0}; //์๋ณ๋ก ๋น๊ตํด์ ์์๋ก ์ ์ฅํด๋ ๊ณต๊ฐ
for( i=0 ; i<MAX ; i++ )
bucket[a[i]/exp%10]++;
for( i=1 ; i<10 ; i++ )
bucket[i] += bucket[i-1];
for( i=MAX-1 ; i>=0 ; i-- )
b[--bucket[a[i]/exp%10]] = a[i];
for( i=0 ; i<MAX ; i++ )
a[i] = b[i];
exp *= 10; //์๋ฆฌ์ ๋น๊ต๊ฐ ๋๋๋ฉด ๋ค์ ์๋ฆฌ์!
}
}
Copy def counting_sort ( arr , digit ):
n = len (arr)
# ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๋ง๋ output ๋ฐฐ์ด์ ์์ฑํ๊ณ 10๊ฐ์ 0์ ๊ฐ์ง count๋ ๋ฐฐ์ด์ ์์ฑํ๋ค.
output = [ 0 ] * n
count = [ 0 ] * 10
# ๊ฐ ์๋ฆฌ์์ ๋ง๊ฒ count๋ฅผ ์ฆ๊ฐ์์ผ์ค๋ค.
for i in range ( 0 , n):
index = int (arr[i] / digit)
count [ (index) % 10 ] += 1
# count ๋ฐฐ์ด์ ์์ ์๋ฅผ ์ฐจ๋ก๋๋ก ๋ํด ๊ฐ ์๋ฆฟ์๋ฅผ ์ ํด์ค๋ค.
# ex) 123,134,151,121
# before : [ 0, 2, 0, 1, 1 ]
# after : [ 0, 2, 2, 3, 4 ]
for i in range ( 1 , 10 ):
count [ i ] += count [ i - 1 ]
# ๊ฐ ์๋ฆฟ์ ๋ณ๋ก output ๋ฐฐ์ด์ ์ฐจ๋ก๋๋ก ์ ๋ ฌํ๋ค.
# ex) 1์ ์๋ฆฌ ์์
# [ 0, 121, 0, 0]
# [ 151, 121, 0, 0]
# [ 151, 121, 0, 134]
# [ 151, 121, 123, 134]
i = n - 1
while i >= 0 :
index = int (arr[i] / digit)
output [ count [ (index) % 10 ] - 1 ] = arr [ i ]
count [ (index) % 10 ] -= 1
i -= 1
# arr์ output์ ํ ๋นํ๋ค.
return output
# Method to do Radix Sort
def radix_sort ( arr ):
# arr ๋ฐฐ์ด์ค์์ ์ต๋๊ฐ์ ๊ฐ์ ธ์ ์๋ฆฟ์๋ฅผ ํ์
ํ๋ค.
# ex) ์ต๋๊ฐ์ด 9833 ์ด๋ฉด 1000๊น์ง
maximum = max (arr)
# ์๋ฆฟ์๋ง๋ค countingSorting์ ์์ํ๋ค.
digit = 1
while int (maximum / digit) > 0 :
arr = counting_sort (arr, digit)
digit *= 10
return arr
๋ณต์ก๋ : O(dn) d๋ ์๋ฆฟ์
ํต์ ๋ ฌ(Quick sort)
pivot(๊ธฐ์ค๊ฐ) ์ ํ๊ธฐ
pivot๋ณด๋ค ์์ ์์๋ค์ ์ผ์ชฝ, ํฐ ์์๋ ์ค๋ฅธ์ชฝ
pivot์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐฐ์ด๊ณผ ์ค๋ฅธ์ชฝ ๋ฐฐ์ด์ ์๋ก์ด ๋ฐฐ์ด๋ก ์ ํ๊ณ ๊ฐ ๋ฐฐ์ด๊ตฌ๊ฐ์์ 1๋ฒ๊ณผ์ ์ฌ๊ท์ ๋ฐ๋ณต
์ผ๋ฐ์ ์ผ๋ก ์ฒ์ ๋๋ ๋ง์ง๋ง ์์๋ฅผ pivot์ผ๋ก ์ก๋๋ค.
Copy int partition (int arr[], int low, int high)
{
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high- 1; j++)
{
if (arr[j] <= pivot)
{
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quickSort(int arr[], int low, int high)
{
if (low < high)
{
//pi = partition index
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
Copy #include <algorithm>
bool compare(int a, int b){
// ์ค๋ฆ์ฐจ์
// return a<b;
// ๋ด๋ฆผ์ฐจ์
return a>b;
}
bool comparep(POINT a, POINT b){
if(a.x == b.x ) return a.y < b.y;
else return a.x < b.x;
}
//์ฒ์๋ถํฐ n-1๋ฒ์งธ๊น์ง ์์๋ฅผ compareํจ์์ ์ ์๋๋ก ์ ๋ ฌ
//ํต์ ๋ ฌ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌํ๋ค.
//std::sort(์ ๋ ฌํ ์๋ฃ์ ์์ ์ฃผ์, ์ ๋ ฌํ ์๋ฃ์ ๋ง์ง๋ง ์ฃผ์,[๋น๊ตํจ์ ์ฃผ์])
std::sort(S,S+n,compare);
Copy def quick_sort ( array ):
if len (array) <= 1 :
return
pivot = array [ 0 ]
temp = array [ 1 :]
left = [i for i in temp if i < pivot]
right = [i for i in temp if i > pivot]
return quick_sort (left) + [pivot] + quick_sort (right)
์๊ฐ ๋ณต์ก๋
์ต์
์ ๊ฒฝ์ฐ : O(N^2)
N^2(์ ํ์ ๋ ฌ, ์ฝ์
์ ๋ ฌ)
๋ค๋ง ํต์ ๋ ฌ์ ํ๊ท ์ ์ผ๋ก ์๊ฐ๋ณต์ก๋๊ฐ O(NlogN)์ด์ง๋ง ์ต์
์ ๊ฒฝ์ฐ(์ด๋ฏธ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ) O(N^2)์ธ ๊ฒ์ ์ฃผ์ํด์ผํ๋ค.
n๊ฐ์ ๋
ธ๋์ ๋ํ ์์ ์ด์งํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค. ์ด๋ ๋ฃจํธ ๋
ธ๋๋ถํฐ ๋ถ๋
ธ๋, ์ผ์ชฝ ์๋
ธ๋, ์ค๋ฅธ์ชฝ ์๋
ธ๋ ์์ผ๋ก ๊ตฌ์ฑํ๋ค.
์ต๋ ํ ์ ๊ตฌ์ฑํ๋ค.
ํ๋ฒ์ ํ๋์ฉ ์์๋ฅผ ํ์์ ์ญ์ ํ๋ฉด์ ์ ์ฅํ๋ค.
ํ ์ ๋ ฌ์ด ์ต๋๋ก ์ ์ฉํ ๊ฒฝ์ฐ๋ ์ ์ฒด ์๋ฃ๊ฐ ์๋ ๊ฐ์ฅ ํฐ ๊ฐ ๋ช๊ฐ๋ง ํ์ํ ๋ ์ด๋ค.
๊ตฌํ
ํ๊ตฌํ์ ํ(heap) ์์ ํ์ธํ ์ ์๋ค.
Copy void heap_sort(int arr[], int n){
int i;
Heap heap;
init(&heap);
for(i=0;i<n;i++){
insert_max(&heap, arr[i]);
}
for(i=n-1;i>=0;i--){
arr[i]=delete_max(&heap);
}
}
๋ณต์ก๋
ํ ์ญ์ ์๊ฐ O(logn)n = *O(nlogn)
๊ณ์ ์ ๋ ฌ(Count Sort)
๊ณ์ ์ ๋ ฌ์ ํน์ ํ ์กฐ๊ฑด์ด ๋ถํฉํ ๋๋ง ์ฌ์ฉํ ์ ์์ง๋ง ๋งค์ฐ ๋น ๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ด๋ค.
๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ธ ์ํฉ์ ๊ฐ์ ํด๋ณผ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ N, ๋ฐ์ดํฐ ์ค ์ต๋๊ฐ์ด K์ผ ๋, ๊ณ์ ์ ๋ ฌ์ ์ต์
์ ๊ฒฝ์ฐ์๋ ์ํ์๊ฐ O(N+K)๋ฅผ ๋ณด์ฅํ๋ค.
๊ณ์ ์ ๋ ฌ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ ๋ฒ์๊ฐ ์ ํ๋์ด ์ ์ ํํ๋ก ํํํ ์ ์์ ๋๋ง ์ฌ์ฉํ ์ ์๋ค. ๋ง์ฝ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ฌดํํ ๋ฒ์๋ฅผ ๊ฐ์ง ์ ์๋ ์ค์ํ ๋ฐ์ดํฐ๊ฐ ์ฃผ์ด์ง๋ ๊ฒฝ์ฐ์๋ ๊ณ์ ์ ๋ ฌ์ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ์ฐจ์ด๊ฐ 1,000,000์ ๋์ง ์์ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๊ณ์ ์ ๋ ฌ์ ์์ ๋ชจ๋ ๋ฒ์๋ฅผ ๋ด์ ์ ์๋ ํฌ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํด์ผํ๊ธฐ ๋๋ฌธ์, ํฌ๊ธฐ์ ์ ํ์ด ์๋ค.
Copy def count_sort ( array ):
count = [ 0 ] * ( max (array) + 1 )
for i in array :
count [ i ] += 1
for j in range ( len (count)):
for x in range (count[j]):
print (j, end = ' ' )
์๊ฐ ๋ณต์ก๋ : O(N+K), ์ต๋๊ฐ ํฌ๊ธฐ K, ๋ฐ์ดํฐ์ N
ํ์ด์ฌ 3.7 ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๋น๊ต
๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ ํ ์ ๋ ฌ์ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํด ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋น๊ตํ์ ๋ ๋งค์ฐ ๋นํจ์จ ์ ์ด์ง๋ง, ํน์ ํ ๋ฆฌ์คํธ์์ ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
sorted()
ํ์ด์ฌ ๊ธฐ๋ณธ ์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ sorted()
๋ ํต์ ๋ ฌ ๊ณผ ๋์ ๋ฐฉ์์ด ๋น์ทํ ๋ณํฉ ์ ๋ ฌ์ ๊ธฐ๋ฐ(๋ณํฉ ์ ๋ ฌ + ์ฝ์
์ ๋ ฌ)์ผ๋ก ๋ง๋ค์ด์ก๋ค. ๋ณํฉ ์ ๋ ฌ์ ํต์ ๋ ฌ๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฌ์ง๋ง, ์ต์
์ ๊ฒฝ์ฐ์๋ O(NlogN) ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ๋ค.
๋ฆฌ์คํธ, ๋์
๋๋ฆฌ ์๋ฃํ์ ๋ฐ์์ ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
Copy arr = [ 7 , 5 , 9 , 0 , 3 , 1 , 6 , 2 , 4 , 8 ]
result = sorted (arr)
print (result) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print (arr) # [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
์ ๋ ฌ์์ Key ๋งค๊ฐ๋ณ์๋ฅผ ์
๋ ฅ๋ฐ์ ์ ๋ ฌํ ์ ์๋๋ฐ, key๊ฐ์ผ๋ก๋ ์ ๋ ฌ ๊ธฐ์ค์ ํ๋์ ํจ์๊ฐ ์
๋ ฅ๋๋ค.
Copy arr = [( 'ํ์ด์ปค' , 26 ) , ( 'ํ
๋' , 25 ) , ( '์ผ๋ฆฌ์' , 20 )]
def setting ( data ):
return data [ 1 ]
print ( sorted (arr, key = setting)) # [('์ผ๋ฆฌ์', 20), ('ํ
๋', 25), ('ํ์ด์ปค', 26)]
sort()
๋ฆฌ์คํธ ๋ณ์๊ฐ ํ๋ ์์ ๋ ๋ด๋ถ ์์๋ฅผ ๋ฐ๋ก ์ ๋ ฌํ ์๋ ์๋ค. sort()
๋ฅผ ์ด์ฉํ๋ฉด ๋ณ๋์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๊ฐ ๋ฐํ๋์ง ์๊ณ ๋ด๋ถ ์์๊ฐ ๋ฐ๋ก ์ ๋ ฌ๋๋ค.
Copy arr . sort ()
print (arr) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Copy arr = [( 'ํ์ด์ปค' , 26 ) , ( 'ํ
๋' , 25 ) , ( '์ผ๋ฆฌ์' , 20 )]
def setting ( data ):
return data [ 1 ]
arr . sort (key = setting)
print (arr) # [('์ผ๋ฆฌ์', 20), ('ํ
๋', 25), ('ํ์ด์ปค', 26)]
์ ๋ ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํญ์ ์ต์
์ ๊ฒฝ์ฐ์๋ ์๊ฐ๋ณต์ก๋ O(NlogN)์ ๋ณด์ฅํ๋ค.