public static void main(String[] args) {
int[] array1 = new int[100];
array1 = randomArray(100, 100);
System.out.println( "Insertion sort: "+insertionSort(array1) <- 여기에 들어가는 array1은 처음에 나온 randomArray
+", Selection sort: "+mergeSort(array1) <- 여기부터 들어가는 array1은 1~100 순서로 정렬되어있음
+", Bubble sort: "+bubbleSort(array1));
int[] array = new int[100];
array = a;
int count = 0;
for (int i = 1; i < array.length; i++) {
int key = array[i];
int p = i;
int check = 0;
while ((p > 0) && (key < array[p - 1])) {
array[p] = array[p - 1];
p--;
count += 1;
check = 1;
}
if (check == 0) count += 1;
array[p] = key;
}
return count;
}
지금 자꾸 array가 정렬된 상태로 두번째 출력에 들어가서 정신나갈거 같음 ㅜㅜ
array = a.clone();
a를 복사해서넣어야지 그대로 주소처박아넣으니까 a가바뀌지머저리야
ㅈㅅㅈㅅ 아직 그런거 잘 몰라서.. 아무튼 땡큐
int같은 원시자료형은 파라메타로 넘어갈때 값이넘어가는데 배열이ㄴ ㅏ클래스같ㅊ은것들은 값이아니라 주소가넘어가서 딴대서 수정해도 바뀐다
정렬함수에 int[] array = a.clone();으로 하면 어떰??
ㄳㄳ
이거 모르면 정렬 알고리즘 이딴거 배울 수준이 안되는거임. comparator generic iterable 이런건 기본으로 깔고 하는건데 참조도 모르면 뒷내용 아예 못한다고 보면 됨 문법 먼저 해라.
오키 땡큐
바바 보통 얘기할때 힙영역과 스택영역 얘기들하지? 근대 스택은 미리 크기를 정해놓고 좁은곳을 공유하는 개념이라 생각해바 메인에서 사용할 변수들이 힙에 쌓인다 그다음 메인에서 호출한 메서드에서 사용할 변수들이 스택에 쌓이는대 이과정에서 매개변수로 넣은것들이 메인이 차지하는 공간에서 호출한 메서드가 사용하는 공간으로 복사 된단 말이지? 근대 스택은 한정적이라 했지? 만약 자바의 배열이 스택에 위치하면 배열을 스택영역보다 크게만들거나 그거보다 작아도 매개변수로 호출할때마다 복사되어 스택에 쌓인다면 그유명한 스택 오버플로우가 발생하겠지? 그래서 자바는 배열은 힙영역에 만들어두고 스택에는 힙영역의 주소만 저장하는거야 그럼 메소드 호출할때 너가 넣은 a는 배열 그 자체가아니라 힙영역에서 배열이 위치하는 주소인거지
즉 array에 new로 배열을 선언하고 사이즈를 100으로주면 힙에 빈 배열이 또생기잖아 그 주소가 array에 저장된거고 거기에 a를 넣으면 array는 a에저장된 주소를 가르키게 되고 나중에 가비지 컬렉션이 사용안해서 해제해야하는 힙에 아까 선언한 400바이트짜리 빈공간만 생긴셈이지
얕은복사 깊은복사 알아두면 좋을듯
ㄳㄳ 많은거 배우고 감