프로젝트 과제인데요..
버블정렬보다 빠른 정렬로 코드를 짜는건데요
삽입정렬로 코드를 짜봤어요
그런데 컴파일은 되는데 원하는 값을 출력을 받지 못했습니다..
대체 뭐가 문제인지를 모르겠어요..
혹시 조언 좀 구할 수 있을까해서 글을 씁니다 ㅠㅠ
소스파일과 헤더파일 코드를 남기겠습니다.
버블정렬은...
//헤더파일
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>
정렬실패
이렇게 뜹니다.
왜 정렬성공이 안뜨고 정렬성공으로 뜨면서 정렬시간까지 뜰 수 있게 알려 주실 분 있으신가요ㅠㅠ
버블정렬보다 빠른 정렬로 코드를 짜는건데요
삽입정렬로 코드를 짜봤어요
그런데 컴파일은 되는데 원하는 값을 출력을 받지 못했습니다..
대체 뭐가 문제인지를 모르겠어요..
혹시 조언 좀 구할 수 있을까해서 글을 씁니다 ㅠㅠ
소스파일과 헤더파일 코드를 남기겠습니다.
버블정렬은...
//헤더파일
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>
정렬실패
이렇게 뜹니다.
왜 정렬성공이 안뜨고 정렬성공으로 뜨면서 정렬시간까지 뜰 수 있게 알려 주실 분 있으신가요ㅠㅠ
