c语言排序,从大到小 for(i=0;i<N-1;i++)和for(j=i;j<N;j++)不懂,尤其是为什么j=i?

2024-12-13 00:58:47
推荐回答(6个)
回答1:

这是选择排序。
就是说,先选出最大的一个,放在数组的第一位(array[0]);然后再选次大的,放在第二位(array[1]),依此类推……
循环中的i 表示已经排好序的元素个数,j从i 循环到n,找出最大的一个(其实是整个数组里第i大的,因为前面已经有i个数排好序了),和array[i]交换
然后i++,相当于这个数值已经被放到合适的位置上,以后不考虑它了,接着排后面的。
i前面的元素都已经排好序了,还管它们干嘛,所以for(j=i;j至于你说的,当j==i时比较array[i]和array[j]没什么用,确实是,但是电脑是不计较这点浪费的,所以如果这样能让你写起来更顺手,大家一般是不会在意多浪费几次的。反正浪费的次数加起来也费不了1ms
如果你不喜欢这样写,你也可以写for(j=i+1;j

回答2:

这个是冒泡法......
第一层循环是控制已经排号需的数组
第二层循环每循环一次就把一个最大数拍到数组的最前边
所以当第一次循环玩以后 array[0]里就是数组里最大的数
第二次循环的时候就直接从 array[1]开始了 所以就是 j=i

回答3:

这是选择排序法,详情请参考百度百科http://baike.baidu.com/view/1575807.htm

回答4:

这个排序是选出最大的数放到数组的前面,第一次循环,选出一个,然后第二次循环的时候,j=i,这样就不用再去判断第一个数的大小了,因为第一个数已经是选择出来的最大数了。明白了吗?举个例子吧,3,2,5,4比较大小,第一步排序后是5,2,3,4,然后第二步比较2,3,4就行,5不用参与到程序中了。

回答5:

i=j之后才能让array[j]从array[i]开始取值,然后随着j不断增大,将第J+1,j+2,J+3。。。。。到j+n(j+n+1=N)个数与第j个数比较大小。即先让第一个数与后面的数进行比较,在让第二个数与后面的数比较,依次往后类推。

回答6:

每一次与它之后的一个进行比较,然后将大的数放到小数后,一次后移一个,冒泡法