C语言的题目 求大佬帮看一下

这个可以写成我红笔写的样子么
把k省略感觉也无所谓吧

原代码,实际效果就是冒泡排序,的确不需要k,但也不需要写i=j。

在冒泡中,依次取每一位(i)和后面所有位(j),比较大小,如果满足比较条件,对应j的值就和i值交换。

所以原代码可以直接写:

for(i=0;i<N+1;i++)
    for(j=i+1,j<N;j++)
            if(st[j].sum>st[i].sum)
            {
                t=st[i];
                st[i]=st[j];
                st[j]=t;
             }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-15
不可以这样改,问题如下:
1。打乱for(i=0;i<N-1;i++)循环
2。if(k!=i)改成了else那就会把它下面的代码变成了第二个for里面的语句了,完全乱了。

比方2,1,4,3排序,会排成1,2,4,3,第一个for循环一次就结束了。
第2个回答  2019-03-15
带标记的冒泡排序算法:它的优势是对于后部已经排好序的的数列,节省了继续向后比较的操作。
带标记的冒泡排序算法:在一次排序中,标记出最后一次进行交换元素的位置,在下次排序中,只需要比较到这个标记位置,因为后面的元素已经排好序