[질문]2차원배열 정렬 조언부탁드립니다.^^;
문제인즉,
/*
1. 정수형으로 선언된 2차원 배열에서 최소값과 최대값이 저장된 행과 열의 값을 출력하는 C 함수를 작성하시오.
main() 함수에서 배열은 정수형 10행 20열로 선언해야 하고,
배열의 시작주소가 함수의 인자로 전달되어야 한다.
*/
아래는.. 버블정렬 이용해서 만들어본것입니다..
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sort(int num[0][0])
{
int i,x,y,temp;
for(x=0;x<10;x++)
{
for(i=0;i<20;i++)
{
for(y=0;y<20;y++)
{
if(num[x][i]>num[x][y])
{
temp=num[x][i];
num[x][i]=num[x][y];
num[x][y]=temp;
}
}
}
}
}
int main()
{
int x,y,num[10][20];
srand(time(NULL));
for(x=0;x<10;x++)
{
for(y=0; y<20; y++)
{
num[x][y]=rand()%90 + 10;
}
}
for(x=0; x<10; x++) sort(&num[x][0]);
for(x=0;x<10;x++)
{
printf("\n");
for(y=0; y<20; y++)
printf("%d ",num[x][y]);
}
return 0;
}
컴팔하고 실행하면,
# gcc -o bubble bubble.c
# ./bubble
99 96 92 92 92 81 70 67 62 57 56 55 52 47 34 33 31 30 23 16
94 90 89 82 73 73 70 65 63 60 58 58 43 39 37 36 34 33 26 19
86 72 72 65 64 60 56 52 51 47 40 31 30 27 26 24 17 13 12 10
98 98 98 89 85 79 77 74 72 72 64 64 50 45 43 35 35 23 20 10
97 95 89 87 87 86 86 85 81 76 76 60 50 47 32 30 27 24 10 10
91 89 88 88 79 74 74 62 58 55 55 54 35 35 30 29 27 25 13 12
95 94 84 81 79 74 66 65 63 55 50 48 45 34 34 34 26 13 11 11
98 93 90 85 84 79 77 71 70 70 59 58 25 24 22 22 22 21 21 20
89 80 80 75 74 72 69 68 67 67 64 58 54 53 41 39 31 22 19 11
96 94 90 90 81 74 73 68 56 50 48 45 45 44 44 31 25 19 17 13
---
이론 --;. 한줄씩만, 정렬이되네요.
너무 무식하게 짠거같은데,, 조언좀 해주세요^^;
들여쓰기에서 글썼는데 게시판에는 안올라와서
소스보기가좀 안좋네요.죄송^^;
위에 소스 보기안좋아서 아래주소에서 봐주세욥^^;;
위에 소스 보기안좋아서 아래주소에서 봐주세욥^^;;
http://albatross.yongin.ac.kr/~mnnclup/bubble.c
정렬할 필요가 있나요? 그냥 num[0][0]부터 num[9][19]까지
정렬할 필요가 있나요? 그냥 num[0][0]부터 num[9][19]까지 훑어가면서
최대값과 최소값의 첨자만 기억하면 될 텐데요.
ps. 그런데 이 코드가 컴파일이 되나요? -.-a
Re: [질문]2차원배열 정렬 조언부탁드립니다.^^;
정말로 배열의 시작주소를 전달하셨네요 ^^;;;
저는 보통 int * a[] 이나 int ** a 이런식으로 쓰는데 ... 제가 특이한건지^^;;
다른 분 글처럼 최대 최소는 그냥 인자만 기억하심이;
2차원으로 안읽고 한줄로 있는 녀석들을 ;;; 읽어가신다고 생각
[quote="mnnclup"]문제인즉,/* 1. 정수형으
주어진 문제에 맞는 답을 내시려면 지금의 방법으론 안될 듯 합니다.
왜냐하면 문제에서 원하는건 원래 저장되어있는 위치를 가져와야 하는데 정렬을 해버리면 그 위치가 변경되죠.
즉 그 값 자체는 가져올 수 있을지 몰라도 원래의 위치를 복원할 수는 없습니다.
가장 간단한 방법이라면 어느 분이 지적하신대로 전체를 다 순환하면서
최대값과 최소값의 위치를 기억하는 방법이겠구요.
다른 방법이라면 각각 한 줄에 대해서 최대값과 최소값을 구하고
다시 이것들에 대해서 최대값과 최소값을 구하면 되겠습니다.
------------------------------------------------------------
이 멍청이~! 나한테 이길 수 있다고 생각했었냐~?
광란의 귀공자 데코스 와이즈멜 님이라구~!
1
리눅스에선 되는데 비쥬얼베이직c++에선 안되네요^^;;
생각해보니 2번째문제가 있어서요..
--
2. 위에서 작성한 2차원 배열의 원소들을 정렬하는 C 함수를 작성하시오.
(힌트: 배열의 원소를 교환하는 프로그램.. 어쩌구저쩌구..~)
답변감사합니다..^^
[quote="cronex"][quote="mnnclup"]문제인즉,
아.원래위치는 아니구요.
정렬한다음에 해당위치 [3][5] 가 최대값이 들어있고,
[6][7]에 최소값이 들어있다~ 이런식으로 하면될꺼같네요.
근데,정렬하면 당연히 [0][0]에 최대값이 들어갈것이고,
[19][19]에 최소값이 들어가겠죠.
문제는 최대최소값구하는것보다는 정렬인데,..음..
아까 질문에서, 정렬하는내용을 제가 빠뜨렸거든요..
음..어찌했든. 그래서 간단하게 2차원배열 2*2 즉 4개를
정렬해보려고 합니다.
아래와같이..
#include <stdio.h>
int main()
{
int num[2][2]={33,22,77,55};
int x,y;
int *p;
for(x=0; x<2; x++) {
for(y=0; y<2; y++) printf("%d \n",num[x][y]);
}
p = # // <-여기서에러가나네요.
for(x=0; x<2; x++) {
for(y=0; y<2; y++) printf("%d \n",p);
}
return 0;
}
포인터로 주소값받아서 하려고
p = &num 했는데 여기서에러나네요
p= &num[] 이런것도 안되공..-..
음어쨋든고민해봐야겠어요..휴..
답변감사드립니다^^;
위에꺼
위에 심플소스 아래처럼수정하니 에러는없는데,,
p값이 배열에 있는그값이 아닌 주소값을 출력하는듯..하네요..음..
#include <stdio.h>
int main()
{
int num[2][2]={33,22,77,55};
int x,y;
int *p;
for(x=0; x<2; x++) {
for(y=0; y<2; y++) printf("%d \n",num[x][y]);
}
p = &num[0][0];
for(x=0; x<4; x++) {
printf("%d \n",p+x);
}
return 0;
}
----실행결과--
33
22
77
55
0012FF70
0012FF74
0012FF78
0012FF7C
Press any key to continue
옷! 이제 좀 무언가 보이는거같습니다..오예..~#includ
옷! 이제 좀 무언가 보이는거같습니다..
오예..~
#include <stdio.h>
int main()
{
int num[2][2]={33,22,77,55};
int x,y;
int *p;
for(x=0; x<2; x++) {
for(y=0; y<2; y++) printf("%d \n",num[x][y]);
}
p = &num[0][0];
for(x=0; x<4; x++) {
printf("%d \n", *(p+x));
}
return 0;
}
--실행결과 --
33
22
77
55
33
22
77
55
Press any key to continue
[quote="mnnclup"]문제인즉,/* 1. 정수형으
원래 문제에는 정렬을 해야 한다는 내용은 전혀 들어있지 않아서 말씀 드린겁니다.
말씀 하신대로 정렬하게 되면 최소값과 최대값이 원래 위치에서 벗어나서 [0][0]와 [9][9]에 들어가게 되죠. 그렇게 되서는 행과 열을 출력하는 의미가 없지 않을 까요? 무조건 [0][0]과 [9][9]를 출력하면 되니까요.
그리고 원하시는 대로 정렬을 [0][0]과 [9][9]에 최대 최소값을 넣는 걸 아주 간단하게 하는 방법이라면 각 행에 대해서 정렬을 하고 또 다시 열에 대해서 정렬을 하는 방법이 있습니다. 물론 최대 최소를 제외하고는 정렬이 되어있지는 않겠습니다만 [0][0]과 [9][9]에는 최대 최소 값이 반드시 들어가 있게 될 겁니다.
------------------------------------------------------------
이 멍청이~! 나한테 이길 수 있다고 생각했었냐~?
광란의 귀공자 데코스 와이즈멜 님이라구~!
[quote="cronex"][quote="mnnclup"]문제인즉,
답변감사합니다.
교수님이 참 ..휴.. 정렬하라고 해놓고는 최대 최소값에 배열은
왜 나오게 하라는건지 ..좀 엉뚱한 문제를 내신것같아요..
어쨋든 일주일간고민하던거 드뎌 해결하였습니다. 감사해요^^
댓글 달기