2013-04-22 3 views
-2

많은 문자열이 있습니다 (예 : "a32ghS : SAD").이를 정렬해야합니다. 다음과 같이 정수 값을 가져올 수 있습니까?String을 Int로 변경하여 더 잘 정렬 할 수 있습니까?

String s = "a32ghS:SAD"; 
int l = 0; 
for (int i = 0; i < s.length(); i++) { 
    l += (int) s.charAt(i); 
} 

정수 l을 기준으로 문자열을 정렬해도 괜찮습니까? 아니면 String을 기반으로 정렬해야합니까?

+1

완전히 정렬하는 방법에 따라 다릅니다. 알파벳순으로? 그냥 문자열을 정렬합니다. 다른 방법이 있니? 그것을 구현하십시오 ... – jlordo

+0

나는이 질문에 투표 한 사람을 봅니다. 그/그녀가 이유를 제공하면 좋을 것입니다. – arunmoezhi

답변

0

당신이하고 싶은 일에 크게 달려 있습니다. :)

그러나 문자열을 기반으로 정렬하면 O (NlogN) 문자열 2int 변환을 수행하게됩니다. 대신 정렬하기 전에 문자열을 변환하면 O (N) 변환으로 만 삭제됩니다.

+0

Okai O (n)이 완벽 할 수 있도록 빠른 알고리즘이 필요합니다. 즉, 정렬하기 전에 문자열을 정수로 변환해야한다는 의미입니까? – XenonUnlimited

+0

문자열이 정수 값을 나타낼 것으로 예상되면 괜찮습니다. 그러나 문자열에 다른 정수가 아닌 값이 포함되어 있다면 - –

0

각 문자의 문자 값을 단순히 더하면 잘못 정렬됩니다 (알파벳순으로 입력해야 함). 문자열 "aZZZZ"을 고려해보십시오.이 코드 샘플은 "b" 이후에 올 것입니다. 당신은 문자열을 문자열에 포함 된 문자의 문자 코드 합계로 정렬합니다., 특히 유용하지는 않습니다.

사전 순으로 정렬하려는 경우 코드를 이미 작성 했으므로 Collections.sort Java 라이브러리 방법을 사용하여 알파벳순으로 정렬해야한다고 가정합니다.

ArrayList<String> list = new ArrayList<String>(); 

unsortList.add("cc"); 
unsortList.add("bb"); 
unsortList.add("dd"); 
unsortList.add("aa"); 

Collections.sort(list); 

전형적인 알파벳 종류가 작동하는 방법은 문자가 다음 문자 등으로 간주하고 다음 같은 경우, 상기 제 1 위치에 ASCII 문자 코드를 비교하고 그들에게 그런 식으로 주문하는 것입니다.

특정 방식으로 정렬하지 않거나 알고있는 문자열에 대한 지식을 활용할 수없는 경우 이러한 종류의 성능을 이길 수 없습니다.

+0

Okai ... 문자열을 기준으로 정렬하려면 내 자신의 Comparator를 코딩했습니다 ... Java 메소드를 사용할 수 없다는 것을 알고있는 한 ... 이 프로그램은 또한 a13b와 같은 perfekt를 정렬합니다 ... a1b .... a24b ... a2b .... a6b ... a78b ... a7b .. 등 ... 원하는 경우 이진 검색 작업을 완벽하게됩니다. String을 검색 하시겠습니까? – XenonUnlimited

+0

바이너리 검색은 정렬 된 목록에서 작동하지만 작업에 사용하지 마십시오.문자열을 다른 것으로 비교하는 방법을 설명하고, 첫 번째 문자가 다른 문자보다 큰 문자 (대문자와 소문자에 대해 약간의 수학을 적용)까지 각 문자를 비교합니다. 그런 다음 정렬 알고리즘이 필요합니다. https://en.wikipedia.org/wiki/Sorting_algorithm#Comparison_of_algorithms 인터넷 주제에 대한 많은 자료가 있습니다. –

0

그러면 "a32ghS:SAD""S32gha:SAD"은 같은 정수 표현이됩니다. 또한 정수를 문자열로 변환하는 데 문제가있을 수 있습니다 (일부 맵 구조를 사용해야합니다).

그래서 대답은 문자열을 정렬하는 것입니다. 실제로 느린 연산 (물론 항목 수에 따라 다름)이 아닙니다.

+0

ahh 네 맞아 ... 그것에 대해 전에 생각 나던 – XenonUnlimited

0

아니요. 문자열의 위치가 중요하기 때문에 (위의 답변 참조) 문자열의 최대 길이를 알고 문자를 추가 한 후 비트 단위로 이동하면 괜찮을 수 있습니다.

String.compareTo는 대부분 같은 방식으로 각 문자의 유니 코드 값을 사용하지만 compareTo 메서드는 기본적으로 대/소문자를 구분합니다.

+0

난 내 자신의 방법을 사용하고 그것은 완벽하게 작동하지만 perfekt 작동하지만 이진 검색도 완벽하게 작동한다면 몰라요 – XenonUnlimited

관련 문제