728x90
반응형
문제
- 배열 {5,3,10,2,9,8}을 오름차순으로 정렬하시오.
- 단, 홀수를 먼저 정렬한 뒤에 짝수를 정렬하시오. → {3, 5, 9, 2, 8, 10}
- 홀수, 짝수의 개수는 같다고 가정한다.
- Arrays.sort() 사용이 가능하다.
1. 값이 저장된 배열 하나로 정렬
▶ 코드 순서
1) Arrays.sort()를 이용해 정렬
//오름차순 정렬
Arrays.sort(arr);
System.out.print("오름차순 정렬:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println("\n");//줄바꿈
2) 홀수 정렬
//홀수 정렬. 정렬되어 있기 때문에 홀수 값을 oddNumber를 이용해 순서대로 앞으로 옮김
for(int i=0;i<arr.length;i++){
if(arr[i]%2!=0){
temp=arr[i];
arr[i]=arr[oddNumber];
arr[oddNumber]=temp;
oddNumber++;
}//홀수일 때, 정렬한 값을 앞으로 바꾼다.
}
- 이미 배열은 오름차순으로 정렬이 되어있기 때문에 홀수 값을 순서대로 찾아 앞 쪽으로 옮기면 홀수 값이 정렬된다.
3) 짝수 정렬 (뒷 배열에 대해 버블 정렬)
//짝수 정렬. 홀수 정렬을 하면서 짝수의 값은 섞여 있을 수 있기 때문에 버블 정렬 이용
for(int i=arr.length-1;i>evenNumber;i--){
for(int j=evenNumber;j<i;j++){
if(arr[j]>arr[j+1]){ //앞에 있는 값이 크면 값 정렬
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
- 무작위로 홀수 값과 자리를 변경했기 때문에 짝수 부분은 정렬이 된 상태가 아니다.
- 짝수 부분의 정렬을 위해 버블 정렬을 이용했다.
- 홀수와 짝수의 개수가 같다고 가정하여, 배열의 절반 부분을 담은 변수 evenNumber부터 정렬을 한다. (evenNumber는 마지막 OddNumber의 값과 같으나 가독성을 위해 변수를 만들었다.)
▶ 전체 코드
System.out.println("문제 3. 오름차순 정렬. 단, 홀수인 값을 먼저 정렬하고 짝수인 값을 나중에 정렬하시오.\n");
int[] arr= {5,3,10,2,9,8};
int temp;
int oddNumber=0;
int evenNumber=arr.length/2; //홀수와 짝수의 개수는 같다고 가정
System.out.print("정렬 전:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println("\n");//줄바꿈
//오름차순 정렬
Arrays.sort(arr);
System.out.print("오름차순 정렬:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println("\n");//줄바꿈
//홀수 정렬. 정렬되어 있기 때문에 홀수 값을 oddNumber를 이용해 순서대로 앞으로 옮김
for(int i=0;i<arr.length;i++){
if(arr[i]%2!=0){
temp=arr[i];
arr[i]=arr[oddNumber];
arr[oddNumber]=temp;
oddNumber++;
}//홀수일 때, 정렬한 값을 앞으로 바꾼다.
}
//짝수 정렬. 홀수 정렬을 하면서 짝수의 값은 섞여 있을 수 있기 때문에 버블 정렬 이용
for(int i=arr.length-1;i>evenNumber;i--){
for(int j=evenNumber;j<i;j++){
if(arr[j]>arr[j+1]){ //앞에 있는 값이 크면 값 정렬
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
//출력
System.out.print("홀수->짝수 순으로 정렬:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
▶ 출력 결과
문제 3. 오름차순 정렬. 단, 홀수인 값을 먼저 정렬하고 짝수인 값을 나중에 정렬하시오.
정렬 전:5 3 10 2 9 8
오름차순 정렬:2 3 5 8 9 10
홀수->짝수 순으로 정렬:3 5 9 2 8 10
2. 빈 배열을 이용해 정렬
▶ 코드
int arr[] = {5, 3, 10, 2, 9, 8};
int arr2[] = new int[arr.length];
int index = 0;
//배열 정렬
Arrays.sort(arr);
System.out.println("배열 정렬:"+Arrays.toString(arr)); //배열 출력
//홀수 입력
for(int i=0; i<arr.length; i++){
if(arr[i]%2 != 0){
arr2[index++] = arr[i]; // {3,5,9,0,0,0}
}
}
//짝수 입력
for(int i=0; i<arr.length; i++){
if(arr[i]%2 == 0){
arr2[index++] = arr[i]; // {3,5,9,2,8,10}
}
}
//출력
System.out.println("홀수->짝수 순으로 정렬:"+Arrays.toString(arr2));
▶ 출력 결과
배열 정렬:[2, 3, 5, 8, 9, 10]
홀수->짝수 순으로 정렬:[3, 5, 9, 2, 8, 10]
728x90
반응형
'HRD_훈련 > 실습' 카테고리의 다른 글
[JAVA] 심화 문제 풀이 (13일차) (0) | 2023.05.31 |
---|---|
[JAVA] 심화 문제 풀이 (12일차) (0) | 2023.05.31 |
[JAVA] 선택 정렬 보완 (0) | 2023.05.28 |
[JAVA] 선택 정렬과 버블 정렬 (1) | 2023.05.25 |
[JAVA] UP&DOWN 답 맞추기 (0) | 2023.05.25 |