수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

정렬 프로그램 입니다!

WatchOut

2023.04.01

질문 제목 : 정렬 프로그램 짜여진 소스정렬 프로그램이 짜여진 소스에다가 임의의 10개의 수를 배열로 넣어서 그 수를 정렬 하는 프로그램..질문 내용 :

#include stdio.h
#include stdlib.h
#define max_size 11
#define name_size 32
#if 0
typedef struct {
int key;
char name[name_size];
} record;
record list[max_size];
int n;
//
insertion_sort_record(record list[], int n)
{
int i, j;
record current_record;
for(i=1; in; i++){
current_record = list[i];
for(j=i-1; j=0 && list[j].keycurrent_record.key;j--)
list[j+1]=list[j];
list[j+1]=current_record;
}
}
#else
int list[max_size];
int n;
#endif
//
insertion_sort(int list[], int n, int (*f)())
{
int i, j;
int key;
for(i=1; in; i++){
#if 0
int k;
// 정렬된 리스트 출력
printf(();
for(k=0;ki;k++)
printf(%d , list[k]);
printf());
// 정렬해야할 리스트 출력
printf(();
for(k=i;kn;k++)
printf(%d , list[k]);
printf()\n);
#endif
key = list[i];
for(j=i-1; j=0 && f(list[j],key);j--)
list[j+1]=list[j];
list[j+1]=key;
}
}
int ascend(int x, int y)
{
if( xy ) return 1;
else return 0;
}
int descend(int x, int y)
{
if( xy ) return 1;
else return 0;
}

#if 0
#define swap(x, y, t) ( (t)=(x), (x)=(y), (y)=(t) )
//
void selection_sort(int list[], int n)
{
int i, j, least, temp;
for(i=0; in-1; i++) {
least = i;
for(j=i+1; jn; j++) // 최소값 탐색
if(list[j]list[least]) least = j;
swap(list[i], list[least], temp);
}
}
//
void bubble_sort(int list[], int n)
{
int i, j, temp;
for(i=n-1; i0; i--){
for(j=0; ji; j++)
/* 앞뒤의 레코드를 비교한 후 교체 */
if(list[j]list[j+1])
swap(list[j], list[j+1], temp);
}
}
//
inc_insertion_sort(int list[], int first, int last, int gap)
{
int i, j, key;
for(i=first+gap; i=last; i=i+gap){
key = list[i];
for(j=i-gap; j=first && keylist[j];j=j-gap)
list[j+gap]=list[j];
list[j+gap]=key;
}
}
//
void shell_sort( int list[], int n ) // n = size
{
int i, gap;
for( gap=n/2; gap0; gap = gap/2 ) {
if( (gap%2) == 0 ) gap++;
for(i=0;igap;i++)// 부분 리스트의 개수는 gap
inc_insertion_sort(list, i, n-1, gap);
}
}
int sorted[max_size];
/* i는 정렬된 왼쪽리스트에 대한 인덱스
j는 정렬된 오른쪽리스트에 대한 인덱스
k는 정렬될 리스트에 대한 인덱스 */
void merge(int list[], int left, int mid, int right)
{
int i, j, k, l;
i=left; j=mid+1; k=left;
/* 분할 정렬된 list의 합병 */
while(i=mid && j=right){
if(list[i]=list[j])
sorted[k++] = list[i++];
else
sorted[k++] = list[j++];
}
if(imid)/* 남아 있는 레코드의 일괄 복사 */
for(l=j; l=right; l++)
sorted[k++] = list[l];
else/* 남아 있는 레코드의 일괄 복사 */
for(l=i; l=mid; l++)
sorted[k++] = list[l];
/* 배열 sorted[]의 리스트를 배열 list[]로 재복사 */
for(l=left; l=right; l++)
list[l] = sorted[l];
}
//
void merge_sort(int list[], int left, int right)
{
int mid;
if(leftright){
mid = (left+right)/2; /* 리스트의 균등 분할 */
merge_sort(list, left, mid); /* 부분 리스트 정렬 */
merge_sort(list, mid+1, right); /* 부분 리스트 정렬 */
merge(list, left, mid, right); /* 합병 */
}
}
int heap[max_size+1];
//
void adjust(int heap[], int root, int n)
{
int child, temp;
temp = heap[root];// 루트 값 저장
child = 2*root; // 왼쪽 자식 노드
while(child = n){// 마지막 노드까지 반복
if(childn && heap[child]heap[child+1])//더 작은 자식노드
child++;
if(tempheap[child]) // 부모 노드와 자식 노드 비교
break;
else// 자식 노드 값을 부모 노드로 복사
heap[child/2] = heap[child];
child = child*2; // 한 레벨 아래로 이동
}
heap[child/2] = temp; // temp가 child보큓hild보다 작은 위치
}
//
void heap_sort(int list[], int n)
{
int i, temp;

for(i=0;in; i++)
heap[i+1]=list[i];
for(i=n/2; i0; i--)// 주어진 리스트를 최대 히프로 변환
adjust(heap, i, n);
for(i=n-1; i0; i--){// 루트 노드와 마지막 노드 교환
swap(heap[1], heap[i+1], temp);
adjust(heap, 1, i); // 축소된 리스트를 루트 노드부터 재조정
}
for(i=0;in; i++)
list[i]=heap[i+1];
}
#endif
#define max_queue_size 100
typedef int element;
typedef struct {
element queue[max_queue_size];
int front, rear;
} queuetype;
//
void error(char *message)
{
fprintf(stderr,%s\n,message);
exit(1);
}
// 초기화 함수
void init(queuetype *q)
{
q-front = q-rear = 0;
}
// 공백 상태 검출 함수
int is_empty(queuetype *q)
{
return (q-front == q-rear);
}
// 포화 상태 검출 함수
int is_full(queuetype *q)
{
return ((q-rear+1)%max_queue_size == q-front);
}
// 삽입 함수
void enqueue(queuetype *q, element item)
{
if( is_full(q) )
error(큐가 포화상태입니다);
q-rear = (q-rear+1) % max_queue_size;
q-queue[q-rear] = item;
}
// 삭제 함수
element dequeue(queuetype *q)
{
if( is_empty(q) )
error(큐가 공백상태입니다);
q-front = (q-front+1) % max_queue_size;
return q-queue[q-front];
}
// 삭제 함수
element peek(queuetype *q)
{
if( is_empty(q) )
error(큐가 공백상태입니다);
return q-queue[(q-front+1) % max_queue_size];
}
#if 0
#define buckets 10
#define digits 4
void radix_sort(int list[], int n)
{
int i, b, d, factor=1;
queuetype queues[buckets];
for(b=0;bbuckets;b++) init(&queues[b]); // 큐들의 초기화
for(d=0; ddigits; d++){
for(i=0;in;i++)// 데이터들을 자리수에 따라 큐에 삽입
enqueue( &queues[(list[i]/factor)%10], list[i]);
for(b=i=0;bbuckets;b++) // 버킷에서 꺼내어 list로 합친다.
while( !is_empty(&queues[b]) )
list[i++] = dequeue(&queues[b]);
factor *= 10;// 그 다음 자리수로 간다.
}
}
#endif
//
void main()
{
int i;
n = max_size;
for(i=0; in; i++) /* 난수 생성 및 출력 */
list[i] = rand()%n;/*난수 발생 범위 0~max_size*/

insertion_sort(list, n, ascend); /* 선택정렬 호출 */
for(i=0; in; i++)
printf(%d\n, list[i]);
insertion_sort(list, n, descend); /* 선택정렬 호출 */
for(i=0; in; i++)
printf(%d\n, list[i]);
}

정렬 공부중인데
위에 소스는 선택정렬, 삽입 정렬, 버블 정렬, 셸 정렬, 합병 정렬, 퀵 정렬, 히프 정렬, 기수 정렬 로 짜여진 소스인데..
제가배운지 얼마안되서..
위에 소스에 임의의 10개의 수를 배열로 지정해서 그 10개의 수를 위 정렬들로 정렬 뒤 출력하는 프로그램을 짜야 합니다.. 위에 소스에 추가해야 할 부분이 어떤게 있는지 알려주시면 감사하겠습니다..ㅠㅠ
너무 터무니 없는 질문인 거 같지만ㅠㅠ..부탁드립니다.

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

번호 제 목 글쓴이 날짜
2700510 c언어를 어케하면 잘할수 있을까요.. 연연두 2025-07-05
2700484 두 개가 차이가 뭔지 알려주세요...(소수 찾는 프로그램) (2) 날위해 2025-07-05
2700426 인터넷 창 띄우는 질문이요 (1) 정훈 2025-07-04
2700400 원넓이를 계산이요 ㅜㅜ 천칭자리 2025-07-04
2700368 if에 관해서 질문이요... Orange 2025-07-04
2700339 이거 결과값이 왜이런건지.. (4) 그댸와나 2025-07-04
2700313 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) 크나 2025-07-03
2700287 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) 아련나래 2025-07-03
2700264 문자와 숫자 동시에 입력??? 글고운 2025-07-03
2700236 txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) 미국녀 2025-07-03
2700211 전위 연산자 (2) 어른처럼 2025-07-02
2700183 C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; 피스케스 2025-07-02
2700150 꼭좀 도와주세요ㅠㅠㅠ 호습다 2025-07-02
2700095 연산문제...질문... 오빤테앵겨 2025-07-01
2700070 while문 , 3의배수 출력하는 프로그램좀 짜주세욤. 횃불 2025-07-01
2700041 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? 헛장사 2025-07-01
2700012 배열// (1) 전갈자리 2025-07-01
2699895 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) 선아 2025-06-30
2699842 질문을 너무 많이 하네여.....죄송.... (2) 해님꽃 2025-06-29
2699816 오류 질문입니다.. (1) 해비치 2025-06-29
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com