太奇葩了吧?再把k=i改成d=i,把if(array[j]
int i , j ,min ;
for ( i = 0 ; i < n-1 ; i ++ )
{
min = i ;
for ( j = i ; j < n ; j ++ )
{
if (arr[j]
}
int temp = arr[ i ] ;
arr[ i ] = arr [ min ] ;
arr[ min ] = temp;
}
我都不知道说什么好!i是外循环计数变量,由它来安排后面的j循环从哪里开始,所以第i以前的都已经排好序了,这说明i只能一次增1来遍历数组。正因为如此,所以才安排一个临时变量k来记录第i以后的所有元素值中最小(或最大)值的下标,以不影响i按部就班地遍历整个数组(最后一个元素可以不包括,因为j是从i+1开始的;当然包括了也不错,只是多作一次循环判断罢了)。你倒好,还在循环体中对i进行干预!你以为k=i了两者就一样了?k=i只是在每一轮循环开始时让k的初值等于i(选择法算法要素之一),而两者的功能完全不同:i在当前一轮循环中不能改变,是要准备把i以后的元素中最小值拿来与i下标的元素比较看是否应该交换;而k是随i以后的元素值的大小而游走的,总是记录着i以后的元素中当前最小值(或最大值)的下标。你把i当k用,随时更改它的值,那外循环还能正常进行吗?排序算法过程全是在外循环正确进程下才有保证,外循环被人为扰乱了,其中的算法还能正常?况且,外循环中还有i++!比如:当前i==5,那么正常时下一轮应该是i==6;可你内循环把i当临时变量k使,倘若array[9]是最小的,那么i立马被赋值为9了,……进程退到外循环由于i++的作用i就是10了,那么i