구현방법 다르지만 비슷하다
1. 기본 오름차순 정렬
2. 문자 정렬은 아스키코드 기준
3. comparator 함수 구현 가능
Comparator
function(a,b) returns [positive,0,negative]
comparator 함수 결과가 양수면 오른쪽 값, 음수면 왼쪽 값이 크다는 의미
0이면 대소비교할 수 없음
JAVA(ArrayList)
import java.util.*;
public class MyClass {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();
list.add("한국어");
list.add("english");
list.add("12number");
list.add("0foo1");
// 오름차순 정렬
Collections.sort(list);
System.out.println(list);
// [0foo1, 12number, english, 한국어]
// 내림차순
Collections.sort(list, Collections.reverseOrder());
System.out.println(list);
// [한국어, english, 12number, 0foo1]
// 사용자 정의 함수
Collections.sort(list, (o1,o2)->o1.length()-o2.length());
System.out.println(list); // [한국어, 0foo1, english, 12number]
}
}
JAVA(Array)
import java.util.*;
public class MyClass {
public static void main(String args[]) {
String[] array = {"한국어", "english", "12number", "0foo1"};
// 오름차순 정렬
Arrays.sort(array);
System.out.println(Arrays.toString(array));
// [0foo1, 12number, english, 한국어]
// 내림차순
Arrays.sort(array, Collections.reverseOrder());
System.out.println(Arrays.toString(array));
// [한국어, english, 12number, 0foo1]
// 사용자 정의 함수
Arrays.sort(array, (o1,o2)->o1.length()-o2.length());
System.out.println(Arrays.toString(array));
// [한국어, 0foo1, english, 12number]
}
}
JAVASCRIPT
let array = ["한국어", "english", "12number", "0foo1"]
// 오름차순 정렬
array.sort();
console.log(array);
// [0foo1, 12number, english, 한국어]
// 내림차순 정렬
array.reverse(); // reverse sort 기본 내장함수 없음, 오름차순 정렬하고 뒤집어야함
console.log(array);
// [한국어, english, 12number, 0foo1]
array.sort((o1,o2)=>o1.length-o2.length);
console.log(array);
// [한국어, 0foo1, english, 12number]
// 숫자 정렬 시
const arr = [1, 10, 2, 7, 23];
arr.sort();
console.log(arr);
// [ 1, 10, 2, 23, 7 ]
arr.sort((o1,o2)=>o1-o2);
console.log(arr);
// [ 1, 2, 7, 10, 23 ]
javascript는 정렬 시 숫자로 지정해도 문자 기준으로 정렬하기 때문에 주의
PYTHON
array = ["한국어", "english", "12number", "0foo1"]
# 오름차순 정렬
array.sort()
print(array)
# ['0foo1', '12number', 'english', '한국어']
# 내림차순 정렬
array.sort(reverse=True)
print(array)
# ['한국어', 'english', '12number', '0foo1']
# 사용자 지정
array.sort(key=lambda o:len(o))
# len(o) 기준으로 정렬한다는 뜻
# ["한국어", "english", "12number", "0foo1"] => [3,7,8,4] 로 변환해서 정렬 수행
print(array)
# ['한국어', '0foo1', 'english', '12number']
# 사용자 지정2
array = [[2,"한국어"], [1,"english"], [1,"12number"], [2,"0foo1"]]
array.sort(key=lambda o:(-o[0],o[1]))
# return을 tuple로 준다면...
# 첫번째 값 -o[0]으로 먼저 정렬하고 두번째 값 o[1] 로 정렬함
print(array)
# [[2, '0foo1'], [2, '한국어'], [1, '12number'], [1, 'english']]
# 사용자 지정3 e.g) 첫번째 요소로 오름차순 정렬, 두번째 요소로 내림차순 정렬
# array.sort(key=lambda o:(o[0],-o[1])) => 이건 str이 음수가 될 수 없기 때문에 안됨
import functools
def compare(o1, o2):
if o1[0]!=o2[0]:
return o1[0]-o2[0]
if o2[1] == o1[1]:
return 0
return 1 if o2[1] > o1[1] else -1
array.sort(key=functools.cmp_to_key(compare))
print(array)
# [[1, 'english'], [1, '12number'], [2, '한국어'], [2, '0foo1']]
'알고리즘' 카테고리의 다른 글
PCCP 정기시험 후기 (lv5, 1000점) (1) | 2024.02.18 |
---|---|
[javascript] 정규식 (0) | 2023.06.22 |
[빠른곱셈-2] 쇤하게-슈트라센 (Schönhage–Strassen) 알고리즘 - 1 (0) | 2023.03.07 |
[빠른곱셈-2][선행지식] DFT in bit operation (0) | 2023.03.02 |
[빠른곱셈-2][선행지식] 중국인의 나머지 정리(chinese remainder theorem) (0) | 2023.02.21 |