์ ํ ์ ๋ ฌ
- ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฐพ์ ๋งจ ๋ง์ง๋ง์ ์์์ swap
- O(N^2)
int arr[10] = {2, 53, 76, 4, 5, 3, 13, 32, 88, 25};
int n=10;
for(int i=n-1;i>0;i--){
swap(*max_element(arr, arr+i+1), arr[i]);
}
๋ฒ๋ธ ์ ๋ ฌ
- ์์์๋ถํฐ ์ธ์ ํ ๋ ์์๋ฅผ ๋น๊ตํ์ฌ ํฐ ๊ฐ์ ๋ค๋ก ๋ณด๋ -> ์ ์ฐจ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๊ฒ ๋จ
- O(N^2)
int arr[5] = {-2, 2, 4, 6, 13};
int n=5;
for(int i=0;i<n;i++){
for(int j=0;j<n-1-i;j++){
if(arr[j]>arr[j+1) swap(arr[j], arr[j+1]);
}
}
Merge Sort
- ๋ฐฐ์ด์ ์ด๋ฑ๋ถํ์ฌ ์์๊ฐ ํ๋๊ฐ ๋ ๋ ๊น์ง ๋๋ ํ, ๋ ๋ฐฐ์ด์ฉ ํฉ์น๋ฉด์ ์ ๋ ฌ
- Stable Sort
- O(NlgN)
#include <bits/stdc++.h>
using namespace std;
int n;
int arr[1000001];
int tmp[1000001];
void merge(int st, int en){
int mid=(st+en)/2;
int idx1=st, idx2=mid;
for(int i=st;i<en;i++){
if(idx1==mid) tmp[i]=arr[idx2++];
else if(idx2==en) tmp[i]=arr[idx1++];
else if(arr[idx1]<=arr[idx2]) tmp[i]=arr[idx1++];
else tmp[i]=arr[idx2++];
}
for(int i=st;i<en;i++) arr[i]=tmp[i];
}
void merge_sort(int st, int en){
if(en-1==st) return;
int mid=(st+en)/2;
merge_sort(st, mid);
merge_sort(mid, en);
merge(st, en);
}
int main(void){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=0;i<n;i++) cin>>arr[i];
merge_sort(0,n);
for(int i=0;i<n;i++) cout<<arr[i]<<"\n";
}
Quick Sort
- pivot๊ฐ์ ๊ธฐ์ค์ผ๋ก pivot๋ณด๋ค ์์ ์๋ฅผ pivot์ ์ผ์ชฝ์, pivot๋ณด๋ค ํฐ ์๋ฅผ pivot์ ์ค๋ฅธ์ชฝ์ ์ ์ฅ
- ๋ฐฐ์ด ์์์์ ์๋ฆฌ๋ฐ๊ฟ๋ง์ผ๋ก ์ฒ๋ฆฌ๋์ด ๋์ cache hit rate -> ๋น ๋ฅธ ์๋๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๋ ์ ๋ ฌ(In-Place Sort)
- O(NlgN), ์ต์ ์ ๊ฒฝ์ฐ์๋ O(N^2)
void quick_sort(int st, int en) { // arr[st to en-1] ์ ๋ ฌ
if(en <= st+1) return; // ์์ด์ ๊ธธ์ด๊ฐ 1 ์ดํ์ด๋ฉด ํจ์ ์ข
๋ฃ.(base condition)
int pivot = arr[st]; // ๋งจ์ ์์๋ฅผ pivot์ผ๋ก ์ก์
int l = st+1; // ํฌ์ธํฐ l
int r = en-1; // ํฌ์ธํฐ r
while(1){
while(l <= r && arr[l] <= pivot) l++;
while(l <= r && arr[r] >= pivot) r--;
if(l > r) break; // l๊ณผ r์ด ์ญ์ ๋๋ ๊ทธ ์ฆ์ ํ์ถ
swap(arr[l], arr[r]);
}
swap(arr[st], arr[r]); //pivot๊ณผ r ๊ฐ ๋ณ๊ฒฝ -> pivot ์ผ์ชฝ์ pivot๋ณด๋ค ์์๊ฐ, ์ค๋ฅธ์ชฝ์ ํฐ ๊ฐ์ผ๋ก ์ ๋ ฌ
quick_sort(st, r);
quick_sort(r+1, en);
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
quick_sort(0, n);
for(int i = 0; i < n; i++) cout << arr[i] << ' ';
}
์ถ์ฒ: https://blog.encrypted.gg/955
'Job > Interview' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
IT ๊ธฐ์ ๋ฉด์ ํ์ ์ง๋ฌธ ์ ๋ฆฌ (0) | 2022.04.14 |
---|---|
์ด์์ฒด์ ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ (0) | 2022.04.09 |
๋๊ธ