c语言问题关于冒泡法排序的

不明白后边的冒泡法排序是j<n-k求解释图片图片

这个函数写得不够直观。
j循环的效果就是把a[0]..a[n-k]最重(大)的一个成员“沉”到a[n-k]处。
大概叫“沉没法”比较恰当。
其实把两个循环写成下面的方式会更好理解

for(k=n-1;k>=1;k--)
    for(j=0;j<k;j++)

冒泡排序的核心是每次找出剩余对象中最大或最小值,j<n-k 中k就代表已经找出来的最大或最小值的数量,接下来只需要在剩余对象中循环比较找出最大或最小值

http://blog.csdn.net/tanqian351/article/details/52061697?locationNum=4&fps=1

冒泡排序就是:每一轮都找到最大的一个数,然后放到最后。
第一个for循环表示的就是一共要循环几轮,对应k。
第二个for循环是在每一轮里面对每个数进行循环,对应j。
总个数是n。
你可以按照程序的思维走一遍:
第一轮,每个都会走一遍,找到最大的放在最后。k=1,j=5。
第二轮,按理说每个都会走一遍,但是第一轮已经把最大的放到最后,所以最后一个肯定比前面的都大,就没必要在比较一次了,所以少比一次。k=2,j=4。
第三轮,同理,最后2个肯定比前面的大,就少比2次。k=3,j=3。
。。。
然后找下规律,k,j,n是一个等式,就可以得出结论的呢

治好了老子多年的颈椎病