가장 작은 숫자를 찾아서 앞으로 보내는 방식
int [] arr = new int[10]; for(int i=0; i <arr.length; i++) { arr[i] = (int)(Math.random()*100) + 1; //랜덤 점수 발생 } System.out.println(Arrays.toString(arr)); //선택 정렬 /* * i, j * 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 * 1,2 1,3 1,4 1,5 1,6 1,7 1,8 1,9 * 2,3 2,4 2,5 2,6 2,7 2,8 2,9 * 3,4 3,5 3,6 3,7 3,8 3,9 * 4,5 4,6 4,7 4,8 4,9 * 5,6 5,7 5,8 5,9 * 6,7 6,8 6,9 * 7,8 7,9 * 8,9 */ for(int i =0; i < arr.length-1; i++) { //9는 비교할 숫자가 없으니까 8까지만 함 int min = i; for(int j= i+1; j <arr.length; j++) { if(arr[min] > arr[j]) { min = j; } } int tmp = arr[i]; //i가 0일때 0자리에 제일 작은 숫자 넣기 위함 arr[i] = arr[min]; arr[min] = tmp; } System.err.println(Arrays.toString(arr));
바로 뒤의 숫자와 비교해서 큰 수를 뒤로 보내는 방식
for(int i= 0; i < arr.length - 1; i++) { boolean flag = true; for(int j= 0; j < arr.length -1 - i; j++) { if(arr[j] > arr[j+1]){ //앞의 숫자가 더크면 뒤로 옮겨줌 int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; flag = false; //더이상 옮겨 줄게 없으면 flag가 true가 됨 } } if(flag) { break; } } System.out.println(Arrays.toString(arr));
두번째 숫자부터 앞의 숫자들과 비교해서 큰 수를 뒤로 밀고 중간에 삽입하는 방식
int [] arr = new int[10]; for(int i=0; i <arr.length; i++) { arr[i] = (int)(Math.random()*100) + 1; //랜덤 점수 발생 } System.out.println(Arrays.toString(arr)); for (int i = 1; i < arr.length; i++) { int tmp = arr[i]; int j; for (j = i - 1; j >= 0; j--) { if (tmp < arr[j]) { //앞의 숫자가 더 크면 arr[j + 1] = arr[j]; //뒷자리를 앞의 자리의 숫자가 사용하게 됨 } else { //앞의 숫자가 더 작으면 break; //나감 } } arr[j + 1] = tmp; //ex) 첫 j for문이 다돌고나면 j가 -1이됨 // arr[0]자리에 작은 숫자를 넣어줌 } System.out.println(Arrays.toString(arr));
//석차 구하기 int [] rank = new int[arr.length]; //등수 for(int i=0; i<rank.length; i++) { rank[i] = 1; //1등부터 시작 } for(int i=0; i <rank.length; i++) { for(int j=0; j <rank.length; j++) { if(arr[i] < arr[j]) { //점수가 높으면 등수가 낮음 rank[i]++; } } } for(int i=0; i < rank.length; i++) { System.out.println(arr[i] + " : " + rank[i] + "등입니다."); }