选择法的原理是将每一个元素与他后面的元素分别比较,如果有比他大的,则交换,所以有2重循环,第一重是参加比较的元素,第二重是参加比较的元素分别与后面(这个记住,是他后面的元素,关键是后面二字)的元素分别比较
void sort(int x[],int n
{ int i,j,k,t;/*元素i,j,k,t,分别代表什么?*/
for (i=0;i
for (j=i+1;j
if(k!=i)//如果前面条件不成立,就是后面一个不比前面的大,那么k的值还是i,即k=i;
{t=x[i];x[i]=x[k];x[k]=t;}//交换
}
}
这样就可以理解了,假设数组有n个元素,那么当:
i=0,最多要比较n-1次
i=1;最多比较n-2次
i=2;最多比较n-3次
......
i=n-2,最多比较1次,楼主可以自己去算算,选择法最多要比较多少次,这个问题是考试和面试中经常问到的问题,祝你进步!
程序中几个变量的意义差不多就是一楼的解释,但这个算法太罗嗦了,直接冒泡法交换就行了,绕来绕去的。
void sort(int x[],int n)
{int i,j,t;
for(i=0;i
{ t=x[i];
x[i]=x[i]; //if语句用来做两个数的交换,因为交换需要一个中间量来过渡。
x[j]=t;}
}
}
i是当前开始查找的位置;j是代表从i的下一个位置开始比较;k是记录从i起之后最大数的位置;
第一个循环是指定开始查找位置 i ;第二个循是得出 i 位置 之后最大数位置;显然,i=0循环结束后,最大的放到了第一位;i=1循环后次大的放在了第二位 ...
{ int i,j,k,t;/*元素i 选择出当前第i+1大的数放在i位置 j是做循环用,k是当前的循环中目前最大数的下标,t是j循环完了后 用作k和i下标数互换的临时变量。
for (i=0;i
for (j=i+1;j
if(k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
}
}