본문 바로가기
C/☞

[40] 정렬

by TR. 2020. 7. 23.

정렬 : 배열응용

 

. 기준 인덱스(0~)의 변수부터 나머지와 값 비교
. 최대값을 찾아서 값 교환
. 기준 인덱스 증가
. 반복하며 내림차순 정렬 진행
. 흐름
  {5, 6, 8, 1, 3} // max = 8
  {8, 6, 5, 1, 3} // max = 6
  {8, 6, 5, 1, 3} // max = 5
  {8, 6, 5, 3, 1} // max = 3
  {8, 6, 5, 3, 1} // max = 1

    srand(time(0));

    int score[5] = {0};
    for(int i=0; i<5; i++){
        score[i] = rand() % 90 +11;
        printf("%d ", score[i]);
    }
    printf("\n");
더보기

단계1 )

       // 정렬 : 배열응용
	// 내림차순 혹은 오름차순으로 배치하는 것

	// 내림차순으로 정렬 : {98 80 54 48 16}
	// max값과 index를 활용해서 정렬가능 (<-> min값 index)
	int scores[5] = {55, 48, 16, 98, 80};
	for(int i=0; i<5; i++){
		int max = scores[i];		// 기준
		int idx = i;				// 기준
		
		for(int j=i; j<5; j++){
			if(max < scores[j]){
				max = scores[j];	// 기억
				idx = j;			// 기억
			}
		}
		// 값 교체 : max가 j인덱스에 존재했을 때
		int temp = scores[i];
		scores[i] = scores[idx];
		scores[idx] = temp;
	}

	// print
	for(int i=0; i<5; i++){
		printf("%d ", scores[i]);
	}
	printf("\n");

 

단계2 )

    for(int i=0; i<5; i++){
        for(int j=i; j<5; j++){
            if(score[i] < score[j]){
                int temp = score[i];
                score[i] = score[j];
                score[j] = temp;
            }
        }
    }
    
    // print
    for(int i=0; i<5; i++){
        printf("%d ", score[i]);
    }
    printf("\n");

 

'C > ' 카테고리의 다른 글

[42] 포인터 기본  (0) 2020.07.23
[41] 셔플  (0) 2020.07.23
[39]-A. 회원가입  (0) 2020.07.23
[39] 회원가입  (0) 2020.07.23
[37] 연습문제 : 2차원 배열  (0) 2020.07.23

댓글