정수 배열을 주면 랜덤으로 섞는 함수를 만들고 싶은데..

namoooo의 이미지

안녕하세요. 취미로 하는 허접코더 나무라고 합니다.

다름이 아니라 일정크기의 정수 배열을 주면 랜덤으로 두 인덱스를 잡아 두 위치의 값을 바꾸는 함수를 만들었습니다.
저 함수를 한 10번 정도 반복 실행하면 배열안의 값이 섞일거라 생각했는데요.

실재로 해보니 매번 sake_list를 호출할때 마다 똑같은 두 위치가 잡히더라구요. 예를들면 10번다 계속 array[2]와 array[8]을 바꾸는...

저는 매번 함수를 호출할때마다 함수 안의 random함수가 다른값을 만들어내리라 기대했는데 그렇게는 안되는거 같구...

어떻게 하면 원래 의도하는대로 할수 있을ㄲ요?


//정수 배열을 넘겨주면 정수배열을 무작위로 섞는 함수
void shake_list(int array[], int size)
{
	
	int m,p,temp;
	time_t t;
	
srand((unsigned) time(&t));

	m=random(size);
	p=random(size);

	temp=array[m];
	array[m]=array[p];
	array[p]=temp;

}

...
...
...

                for(i=0;i<10;i++) {
	shake_list(array,25);
	}

galadriel의 이미지

srand함수는 랜덤함수를 사용할 때 처음 seed값을 지정해주기 위한
것입니다. 만약 namoooo님이 만드신 함수를 for문으로 돌리게 되면

srand함수는 time함수를 통해서 seed를 결정하게 되는데 시간차이가
없으므로 거의 변화가 없게되죠.^^;;;

따라서 srand는 프로그램의 처음에 한번 써주시면 될 것 같습니다.

galadriel in the tower of elves

goodfiend의 이미지

void swap(int * x, int * y)
{
	int temp;
	temp = *x;
	*x = *y;
	*y = temp;
}

/*
 * shake_list: 배열을 섞는 함수.
 * arguments:
 * 	int * p: 섞고싶은 정수 배열의 시작주소.
 * 	int n: 배열의 원소 갯수
 * return:
 * 	void
 * 랜덤으로 한개씩 뽑아 맨 뒤에 차례로 놓으면서 섞음.
 */
void shake_list(int * p, int n)
{
	int ran;			// 랜덤으로 뽑은 인덱스
	srand(time(NULL));
	while (n>1) {
		ran = rand() % n;
		swap(&p[ran], &p[--n]);
	}
}

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.