반응형
배열을 인자로 받아서 아스키 코드 순으로 정렬을 한 뒤 리턴하는 함수를 작성해 보겠습니다.
function asciiSort(input, reverse) {
var output = [],
temp;
if (input != undefined && input != null) {
for (var i = 0; i < input.length; i++) {
output.push(input[i]);
}
for (var i = 0; i < input.length; i++) {
for (var j = i + 1; j < input.length; j++) {
if (compareTo(output[i], output[j], reverse)) {
temp = output[i];
output[i] = output[j];
output[j] = temp
}
}
}
}
return output;
};
reverse 여부도 인자로 받아서 역순 정렬까지 고려를 하였습니다.
먼저 input으로 받은 배열을 그대로 output 변수에 복사를 합니다.
앞뒤 값을 비교하여 순서를 바꾸는 버블 정렬을 이용하였습니다.
높은 시간 복잡도를 갖지만 단순하여 자주 쓰입니다.
그럼 compareTo 함수에 아스키 코드 값 크기를 비교하는 로직을 넣어 보겠습니다.
function compareTo(o1, o2, reverse) {
var m, result;
m = Math.min(o1.length, o2.length);
result = true;
for (var i = 0; i < m; i++) {
if (o1.charCodeAt(i) !== o2.charCodeAt(i)) {
result = o1.charCodeAt(i) > o2.charCodeAt(i);
break;
}
}
result = !reverse ? result : !result;
return result;
}
앞 자리부터 차근차근 비교하여 다른 값이 나오는 지점에서 크기를 판단하여 boolean 값을 리턴합니다.
다만 'aaa'와 'aaab'를 비교하게 되면 결국 앞 3자리가 같으므로 더 이상 비교하지 못하고 초기 셋팅 값인 true를 리턴하게 될 겁니다.
물론 reverse가 true라면 그 반대가 되겠죠.
작성 함수를 이용하여 간단히 예제를 돌려 보겠습니다.
(function(){
var test = ['fd', 'ea', 'fsd', 'ecb', 'aa', 'fb'];
console.log(asciiSort(test, false));
})();
// 출력 결과: ["aa", "ea", "ecb", "fb", "fd", "fsd"]
아스키 코드 순으로 정확히 정렬이 되었습니다.
반응형
'프로그래밍 & IT 정보 > Javascript' 카테고리의 다른 글
자바스크립트 콜백 함수 예제를 통해 개념 및 원리 쉽게 이해하기 (12) | 2020.12.01 |
---|---|
자바스크립트 Base64 이미지 코드 파일로 쓰기 (0) | 2020.09.24 |
자바스크립트 이미지 크기 조정 및 보정 로직 (0) | 2020.09.24 |
자바스크립트 텍스트 길이(바이트) 구하기 (0) | 2020.09.24 |
로컬스토리지에서 배열로 저장하는 방법 (0) | 2020.07.03 |
자바스크립트 URL 및 E-Mail 링크 자동 생성 (0) | 2020.07.03 |
자바스크립트 JSON 오브젝트 복사 (0) | 2020.07.02 |
자바스크립트 타임스탬프 날짜 변환 (1) | 2020.07.02 |
댓글