Algorithm/Do it

[자료구조와 함께 배우는 알고리즘 입문 - C언어 편] 2장 기본 자료구조 연습문제 Q10 답안 p.76

Bonita SY 2019. 10. 9. 23:20
728x90
반응형

Q10. 배열 a의 모든 요소의 순서를 뒤섞는 shuffle 함수를 작성하세요. (n은 요소 개수입니다.)

void shuffle(int a[], int n);


코드)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define swap(type, x, y) do { type t = x; x = y; y = t; } while(0)

void shuffle(int a[], int n) {
  int i=0; //index
  srand(time(NULL));
  for(i; i<n; i++) {
    int shf_index = rand() % n;
    swap(int, a[i], a[shf_index]);
  }
};

int main(void) {
  int i; //index
  int ary_length;
  int *org_ary;

  printf("배열의 길이를 입력하세요. : ");
  scanf("%d", &ary_length);
  org_ary = calloc(ary_length, sizeof(int));

  puts("배월 원소를 입력하세요.");
  for(i=0; i<ary_length; i++) {
    printf("원본 배열[%d] : ", i);
    scanf("%d", &org_ary[i]);
  }

  shuffle(org_ary, ary_length);

  for(i=0; i<ary_length; i++) {
    printf("셔플된 배열[%d] : %d\n", i, org_ary[i]);
  }
}

실행결과)

sy@sy:~/algorithm/doit/chap02$ ./q10
배열의 길이를 입력하세요. : 5
배월 원소를 입력하세요.
원본 배열[0] : 1
원본 배열[1] : 2
원본 배열[2] : 3
원본 배열[3] : 4
원본 배열[4] : 5
셔플된 배열[0] : 3
셔플된 배열[1] : 1
셔플된 배열[2] : 4
셔플된 배열[3] : 5
셔플된 배열[4] : 2

 

728x90
반응형