나는 작업중인 프로그램에서 다양한 유형의 정렬을 구현하려고 시도해 왔습니다. 지금까지 나는 정수를 정렬 할 수있었습니다.이 (병합) 코드가 int 배열이 아닌 String 배열을 정렬하도록 변경해야하는 것은 무엇입니까? 시간 복잡도는 다양합니까? 그렇다면, 좋든 나쁘 든?문자열 병합 정렬 구현
EDIT 1 : compareTo를 사용하려고했습니다. 뭔가 옳지 않은 것처럼 보입니다. 오류가 반환됩니다 (예 : ). 문자열을 int로 변환 할 수없고 그 반대로도 변환 할 수 없습니다. 수정 됨
EDIT 2 : if (array [low] .compareTo (array [high])> = 0) 행에서 NullPointerException이 발생합니다. 제안은 언제나 환영합니다.
이
오류입니다 :null null null null null
Exception in thread "main" java.lang.NullPointerException
at Merge.mergeSort_srt(Merge.java:28)
at Merge.Sort(Merge.java:15)
at Sort.main(Sort.java:73)
import java.io.File;
public class Merge
{
public void Sort (LinkedList listIn, int size) throws Exception
{
String[] mergeArray = new String[size] ;
String textContent = null ;
File outputFile ;
for(int i = 0; i < mergeArray.length; i++)
System.out.print(mergeArray[i]+" ");
System.out.println();
mergeSort_srt(mergeArray,0, mergeArray.length-1);
System.out.print("Values after the sort:\n");
for(int i = 0; i <mergeArray.length; i++)
System.out.print(mergeArray[i]+" ");
System.out.println();
System.out.println("PAUSE");
}
public static void mergeSort_srt(String array[],int lo, int n)
{
int low = lo;
int high = n;
if (array[low].compareToIgnoreCase(array[high]) >= 0)
{
return;
}
int middle = ((n+1)/ 2);
mergeSort_srt(array, low, middle);
mergeSort_srt(array, middle + 1, high);
int end_low = middle;
int start_high = middle + 1;
while ((array[low].compareToIgnoreCase(array[end_low]) <= 0) && (array[start_high].compareToIgnoreCase(array[high]) <= 0))
{
if(array[low].compareToIgnoreCase(array[start_high]) < 0)
{
low++;
}
else
{
String Temp = array[start_high];
for (int k = start_high- 1; k >= low; k--)
{
array[k+1] = array[k];
}
array[low] = Temp;
low++;
end_low++;
start_high++;
}
}
}
}
돈을 게시물을 편집하면 제목에 EDIT라는 단어를 넣지 마십시오. 스택 오버플로에서 예외가 아니라 편집이 표준입니다. – teukkam
그것에 대해 죄송합니다 – serge