1. 정수 10개짜리 nums배열을 생성한다.
int[] nums = {1,2,3,4,5,6,7,8,9,10};
2. 랜덤값 두개를 뽑아서 100번 섞는다.
정수 두개 변수선언을하고 각각 랜덤함수를 적용해준다.
잘 섞였는지 출력해서 확인
Random rand = new Random();
for(int i=0;i<100;i++) {
int idx1 = rand.nextInt(10); //0~9
int idx2 = rand.nextInt(10); //0~9
System.out.printf("idx1: %d, idx2:%d\n",idx1,idx2);
3. 랜덤으로 뽑은 두 인덱스를 섞는다. (섞기연습)
int temp;
temp = nums[idx1];
nums[idx1] = nums[idx2];
nums[idx2] = temp;
4. 버블정렬을 위해 제일 큰 값을 찾는다.
n번째값보다 n+1번째 값이 크다면 서로 위치를 바꾼다.(if문)
가장 큰값이 마지막에온다.
0번째값이 1번쨰값보다 크다면 두 위치를 값을 바꾼다.
1번쨰값이 2번째값보다 크다면 두 위치의 값을 바꾼다. ~ 8번째값이 9번째값보다 크다면 두 위치의 값을 바꾼다.
for(int i=0;i<9;i++) // 범위주의 (인덱스갯수-1 : 인덱스가4개일경우 3번이면 모두비교됨)
if(nums[i]>nums[i+1]) {
int temp;
temp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = temp;
}
5. 버블정렬로 오름차순(이중 for문)
0,1,2,3,4,5,6,7,8,9의 10개의 수가 섞여있는 배열을 오름차순으로 정렬하기위해서
각 수를 두개씩 묶어서 비교하면 9번만 검사하게된다. (안쪽 for문)
이 반복을 또 9번해야 전체적으로 정렬이된다.(바깥 for문)
바깥for (int j=0;j<9-1;j++) : 전체범위 , 9번 반복
안쪽for ( int i=0;i<10-i-1;i++) : 바깥for문이 한번돌면 가장큰 숫자는 맨 오른쪽에위치한다. 확정된 것은 더이상 비교할필요없다.
for(int j=0;j<10-1;j++)
for(int i=0;i<10-1-j;i++)
if(nums[i]>nums[i+1]){
int temp;
temp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = temp;
}
큰for문의 j가 작은for문안에서 쓰여서
for(int i=0;i<10-1;i++) : 제일큰 것 찾기, 나머지애들끼리 값을 비교
for(int i=0;i<9-1;i++) : 두번쨰로 큰 것 찾기
for(int i=0;i<8-1;i++) , ... 로 점차좁혀진다.
6. ',' 쉼표찍기
인덱스가 10개이지만 쉼표는 마지막에 빠져야한다. (즉, 9번만 발생)
if문을 사용해서 9번째까지만 찍도록 for문안에 중첩한다.
for문을 이용해 nums[i]의 값을 순서대로 출력하되, i가 9보다 작다면 ','를 출력한다.
for(int i=0;i<10;i++) {
System.out.print(nums[i]);
if(i<9)
System.out.print(",");
}
5. 전체 오름차순으로 버블정렬
package ex3.array.test2;
import java.util.Random;
public class practice {
public static void main(String[] args) {
//1.정수 10개짜리 nums배열을 생성한다. 단, 1,2,3,4~10
int[] nums = {1,2,3,4,5,6,7,8,9,10};
//섞는다.
//랜덤값을 얻어서
Random rand = new Random();
for(int i=0;i<100;i++) {
int idx1 = rand.nextInt(10); //0~9
int idx2 = rand.nextInt(10); //0~9
System.out.printf("idx1: %d, idx2:%d\n",idx1,idx2);
//두 인덱스의 위치를 바꿔라.
int temp;
temp = nums[idx1];
nums[idx1] = nums[idx2];
nums[idx2] = temp;
}
for(int i=0;i<10;i++) {
System.out.print(nums[i]);
if(i<9)
System.out.print(",");
}System.out.println();
//버블정렬 제일큰 값을 찾아서 맨 뒤로 밀어내기
//배열에서 가장 큰 값찾기
// 범위주의 (인덱스갯수-1 : 인덱스가4개일경우 3번이면 모두비교됨)
for(int j=0;j<10;j++) {
for(int i=0;i<(10-j)-1;i++)
if(nums[i]>nums[i+1]){
int temp;
temp = nums[i];
nums[i] = nums[i+1];
nums[i+1] = temp;
}
}
for(int i=0;i<10;i++) {
System.out.print(nums[i]);
if(i<9)
System.out.print(",");
}
System.out.println();
}
}
'2021 Newlecture > JAVA' 카테고리의 다른 글
코로나 검사 누적수 구하기 / 반복문 / 문자열구분 (0) | 2021.03.12 |
---|---|
String클래스 / 문자열배열 섞기/ 문자열비교 / 문자열정렬 (0) | 2021.03.11 |
사진복사 / write(byte [] b, int off, int len) 이용해 출력 (0) | 2021.03.11 |
배열 / FileInputStream / Scanner()/ hasNextLine() / while() (0) | 2021.03.10 |
File Stream이용해 파일복사하기/ read(byte[] b)/ 배열과 for문 / (0) | 2021.03.09 |
if / switch / 중첩된 제어구조 벗어나기 /do while (0) | 2021.03.08 |
nextInt() , nextLine()사용시 주의사항/Integer.pasrseInt() (0) | 2021.03.08 |
복합 대입연산자 / 삼항연산자 (0) | 2021.03.08 |