2013-04-10 13 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

谷歌冒泡排序。 – 2013-04-10 10:11:13

+0

只需要注意 - 我想交換操作由3個'strcpy'組成(如上所述)會導致相當慢的排序(不是說這種排序速度足夠快,以至於它在實踐中用於開始,但這就是點)。通常的想法是交換指針(除非你正在處理基元)。 – Dukeling 2013-04-10 10:15:03

+0

@Armin:這不是一個冒泡排序。請注意,他比較/交換非連續元素。 – comocomocomocomo 2013-04-10 10:54:33

回答

2

這是一個特別慢的選擇排序版本。

它看起來像一個冒泡排序,但冒泡排序會比較/交換位置j-1j,這是連續的元素。您比較/交換位置ij上的元素。

在外循環的每次迭代期間,i保持不變,而ji+1前進到最後。因此,您最終得到的位置爲i

你可能會做很多不必要的動作。適當的選擇排序將搜索最小值而不移動任何東西。然後它會將該最小值與位置​​i處的值進行交換。因此,它只會在數組中執行每個元素的一次交換。