2013-04-10 2 views
0
void main() 
{ 
    char name[5][10],temp[10]; 
    int i,j; 
    for(i=0;i<5;i++) 
{ 
printf("\nEnter the name of student:"); 
scanf("%s",name[i]); 
} 
for(i=0;i<(5-1);i++) 
{ 
    for(j=i+1;j<5;j++) 
    { 
    if(strcmp(name[i],name[j])>0) 
    { 
    strcpy(temp,name[i]); 
    strcpy(name[i],name[j]); 
    strcpy(name[j],temp); 
    } 
    } 
} 
printf("\n the name of student is:"); 
for(i=0;i<5;i++) 
{ 
printf("\n%s",name[i]); 
} 
getch(); 
} 

삽입 정렬과 선택 정렬의 차이점을 알 수 없습니다.이 코드는 다음 선택 알고리즘 또는 삽입입니까?선택입니까? 정렬 또는 삽입 정렬입니까? 제게 올바른 방향을주세요.

+0

Google 거품 정렬. –

+0

참고로 - 나는 스왑 연산이 3 개의 strcpy (위와 같이)로 이루어져 있으면 오히려 느린 정렬로 이어질 것이라고 상상한다. (이 종류는 실제로 시작하기에 실제로 사용되는 것은 아니지만 그 옆에있다. 요점). 일반적인 생각은 포인터를 바꾸는 것입니다 (여러분이 프리미티브를 다루지 않는다면). – Dukeling

+0

@Armin : 거품 정렬이 아닙니다. 그는 인접하지 않은 요소를 비교/교체한다는 점에 유의하십시오. – comocomocomocomo

답변

2

이것은 선택 정렬의 속도가 느린 버전입니다.

버블 정렬과 비슷하지만 버블 정렬은 인접한 j-1j 위치의 요소를 비교/바꿀 것입니다. 위치가 ij 인 요소를 비교/교환합니다.

외부 루프가 반복 될 때마다 i은 변하지 않고 ji+1에서 끝까지 진행됩니다. 따라서, 당신은 i 위치에 최소값을 갖는 요소를 갖게됩니다.

아마도 많은 불필요한 움직임을 만들 수 있습니다. 적절한 선택 정렬은 아무 것도 움직이지 않고 최소값을 검색합니다. 그런 다음 최소값을 위치 i의 값으로 바꿉니다. 따라서 배열의 요소 당 하나의 스왑 만 수행합니다.