这个程序看不懂这是个被调函数,实现从大到小排序void sort(int x[ ],int n){int i,j,k,tfor(i0in-1i+
这个程序看不懂
这是个被调函数,实现从大到小排序
void sort(int x[ ],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(x[ j]>x[k]) k=j;
if(k!=i)
{t=x[i];x[i]=x[k];x[k]=t;}
}
}
最后一句(if(k!=i)之后的)看不懂,求助…
[解决办法]
就是说,循环完一遍,如果if(x[ j]>x[k]) 条件满足过,即 !k==i,那么久交换位置,否则不动
[解决办法]
t=x[i];x[i]=x[k];x[k]=t;}
这个是交换啊。。
t是个中转站
先把 x[i]的值给t,然后把x[k]的值给x[i],然后把t的值给了x[k],
实现x[i]和x[k]的数据交换。。
[解决办法]
简单的说是交换x[k]与x[i]的值
[解决办法]
选择排序。。。。楼主 你这结帖率。。。把改结贴的结了吧
[解决办法]
又是sort!
[解决办法]
[解决办法][解决办法]优化的排序算法,现在设定一个数组{3,4,6,8,2,9},先给你介绍个简单的算法,再说你的算法。
1.要实现排序,要拿出第一个数,然后分别跟之后的数比较,如果第一个数大于之后的任一个数,则这两个数交 换,这样就实现了排序。具体操作:
for(int i=0;i <arr[].length;i++) {
for(int j=i+1;j <arr[].length;j++) {
if(arr[i]> arr[j]) {
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;//实现两个数的交换
}
}
}
这是第一种算法。下面介绍第二种
2.第一种算法做得有重复的地方,比如第一个数是3,要交换时,先跟第二个数交换,然后还要跟后面的2交换,这样就造成了算法效率不高。这时我们改进一下算法,在比较的时候,让他跟后面的最小的数交换,这样就提高了效率(楼主的代码写的太乱)
void sort(int x[ ],int n)
{
int i,j,k,t;
for(i=0;i <n-1;i++){
k=i;/*这一步比较重要,引入一个中间变量k,如果x[j]比x[i(k=i)]大,则让k=j,继续到后面找最小 的*/
for(j=i+1;j <n;j++) {
if(x[j]> x[k]) k= j;/*这一步是主操作,从i+1个数开始跟第k(初始为i)个数比较,如果小,则把下标赋给k,这样使得最后k是最小的*/
}
if(k!=i){//如果k==i,说明第i个是最小的,无需交换,如果不等,说明后面有比第i个数还小的,交换
t=x[i];x[i]=x[k];x[k]=t;//实现两个数的交换
}
}
}
[解决办法]如果k不等于i,就交换x[k]和x[i]的值
[解决办法]可以调试的时候看看变量的变化
[解决办法]把 K换成 i+1再看
[解决办法]输入一个3~5个元素的数组,但步运行
[解决办法]把if(k!=i)去掉也能实现,好理解了,然后再加上就能明白这句是来优化代码,如果两个相同就不需要交换值
[解决办法]选择排序,刚开始学的时候感觉很纠结,套上例子使用就容易理解了
[解决办法]选择排序嘛
[解决办法]