谁能给详细我讲讲,k=!i往后,我就迷惑了,

来源:百度知道 编辑:UC知道 时间:2024/06/14 15:31:10
#include<iostream.h>
int a[]={2,6,-1,8,5,0,-7,4};
const int N=8;
void main()
{
int t,k;
for(int i=0;i<N-1;i++)
{
k=i;
for(int j=i+1;j<N;j++)
if(a[j]<a[k])
k=j;
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}

}
for(i=0;i<N;i++)
cout<<a[i]<<' ';
cout<<endl;
}

看你程序,功能应该是将a数组从小到大排列。
if(k!=i)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
程序思路:采用的是第一个数和后面一个数比较,将比较得到的最小数的下标存于变量k,再将a[k]与下一个数比较,将比较得到的最小数的下标存于变量k,重复直到最后一个数,然后将最小数也就是a[k]与第一个数互换。到此第一轮排序结束。然后第二轮,第二个数和后面一个数比较...『好像叫什么冒泡法』

解读:本来k=i,如果a[j]<a[k],那么k=j,即k!=i了,也就是说后面还有比a[i]更小的数,这个时候就要将一轮比较完后得到的最小的那个数a[k]与a[i]互换。
t=a[i];
a[i]=a[k];
a[k]=t;
这段就是互换,先将要互换的两数中之一存入变量t,再将a[k]存入a[i],即此时a[i]的值已成a[k]的值,最后将t的值即原来的a[i]值赋值给a[k],这样2个变量就互换了值。

k原先是==i,当a[j]<a[k]成立时,被赋给新值,不成立时仍然==i.
k如果==i就说明不用交换,就是按顺序来的,
如果!=i,就说明要交换,将小的交换到前面

这个不就是冒泡排序的么~~~if(a[j]<a[k])的话
(也就是第I+1个数和第I个数比较,第I个数大的话), K就=J,就不会等于I~~所以就会交换相临的两个数~~~所以就会循环比较大小,最终实现成从小到大排列。

if(k!=i)的前面一句是k=j,也就是说将j的值附值给k,然后就是i和j去比较,如果i!=j时,就把a[i]和a[k]的值对换就行了。
最后面那个for循环语句是一个显示句。

这是要让a[]里的8个数从小到大排列。
用的是选择法。
把最小的数的位置记录在k里,如果k!=i,就是不等于本身,就把a[i]跟a[k]的值对换。

这是一个数组从小到大的排列,程序思路是:依次拿数组的每一个元素与它后面的元素相比较,如果有小于或等于这个元素并且又不是它本身的话,就交换它们,