자료구조 물어볼게 있어요ㅠㅠ

  • LV 1 zenojm
  • 비추천 0
  • 추천 2
  • 조회 3431
  • 2013.11.25 15:02
  • 문서주소 - /bbs/board.php?bo_table=qna&wr_id=35151
프로젝트 과제인데요..
버블정렬보다 빠른 정렬로 코드를 짜는건데요
삽입정렬로 코드를 짜봤어요
그런데 컴파일은 되는데 원하는 값을 출력을 받지 못했습니다..
대체 뭐가 문제인지를 모르겠어요..
혹시 조언 좀 구할 수 있을까해서 글을 씁니다 ㅠㅠ

소스파일과 헤더파일 코드를 남기겠습니다.
버블정렬은...
//헤더파일
typedef struct{
int listIdx;
int elementIdx;
} Element;

void initList(int size, int bDebug); // 정렬되지 않은 리스트(listIdx = 0)을 생성함
int createList(int size); // 요소의 개수가 size인 새로운 리스트를 생성함;(임시 저장 공간을 위해서 사용할 수 있음)
// 99개의 리스트를 생성할 수 있음.
void destroyList(int listIdx); // createList()로 생성된 리스트 중에서 사용되지 않는 리스트를 삭제함
int compare(Element e1, Element e2); // 두개의 요소를 비교함( e1 == e2 이면 0, e1 > e2 이면 1, e1 < e2 이면 -1)
void assign(Element e1, Element e2); // e1요소에 e2의 값을 할당함
void validateList(); // ListIdx가 0인 리스트가 정렬됨을 검사함. 실패하면 정렬되지 않는 elementIdx을 반환함
// 정렬 성공시에는 정렬 시간을 출력함
int getValue(Element e); // 요소에 할당된 값을 반환함(bDebug != 0 인 경우에만 동작함)

//소스파일
#include "listMgr.h"

#define MAX_ELEMENT 1000 // 정렬할 요수의 개수

void bubble_sort()

int i, j;
Element temp, e1, e2;

initList(MAX_ELEMENT, 0);

temp.listIdx = createList(1);
temp.elementIdx = 0;
e1.listIdx = 0;
e2.listIdx = 0;

  for(i=MAX_ELEMENT-1; i>0; i--){
for(j=0; j<i; j++){ // 앞뒤의 레코드를 비교한 후 교체
e1.elementIdx = j;
e2.elementIdx = j+1;
if ( compare(e1, e2) > 0 ){
assign( temp, e1 );
assign( e1, e2 );
assign( e2, temp );
}
}
  }

destroyList(temp.listIdx);
validateList();
}

void main()
{
bubble_sort();
}


제가 짠 삽입정렬은..
//소스코드

#include "listMgr.h"

#define MAX_ELEMENT 1000

void insertion_sort()
{
int i, j;
Element key, e1, e2;

initList(MAX_ELEMENT,0); //MAX_ELEMENT값의 리스트 소환

key.listIdx = createList(1);  //요소의갯수가1인 새로운 리스트를 생성해 key.listIdx할당
key.elementIdx = 0;
e1.listIdx = 0;        //위에서 할당할 리스트를 e1, e2에 할당
e2.listIdx = 0;

for(i=1;i<MAX_ELEMENT;i++){

e1.elementIdx = i;    //e1에 i를 할당
assign( key, e1 );    //key에 list[i]를 삽입

for(j=i-1;j>=0 && compare(e1, key);j--)
e1.elementIdx = j;        // e1에 j를 할당
e2.elementIdx = j+1;   // e2에 j+1를 할당
assign( e2, e1 );        //e2(j+1)에 e1(j)을 삽입
assign( e2, key );        //e2(j+1)에 key을 삽입


}
destroyList(key.listIdx);        // 생성된 리스트중에서 안쓰는거 파기 (key.listIdx)
validateList();              //(검사하고 결과값 출력)
}

void main()
{
insertion_sort();
}



========================================================================
이 밑에 있는 삽입정렬을 참고 하면서 짜봤습니다
void insertion_sort(int list[], int n)
{
int i, j, key;
for(i=1; i<n; i++){
key = list[i];

for(j=i-1; j>=0 && list[j]>key; j--)
list[j+1] = list[j];
list[j+1] = key;
}
}
========================================================================
버블정렬을 실행시
정렬성공
정렬시간 : 5344.446000초

이렇게 뜨구요..

삽입정렬 실행시
...
정렬되지 않는 요소 : <999>
정렬실패

이렇게 뜹니다.

왜 정렬성공이 안뜨고 정렬성공으로 뜨면서 정렬시간까지 뜰 수 있게 알려 주실 분 있으신가요ㅠㅠ

추천 2 비추천 0

Print