关于c语言的一个简单排序问题,看下图,为什么要用2个for循环,而且还要用a[i]和a[k]两种数

关于c语言的一个简单排序问题,看下图,为什么要用2个for循环,而且还要用a[i]和a[k]两种数组,下面的交换最小数是怎么回事???

a[i],a[k]并不是两个数组,这里只有数组a,i、k都是数组的下标,用来取数组内的值
两次循环的功能分别是:
1,用i的递增依次取数组内的值(从头开始到最后)
2,用k的递增依次取i之后的值(从i+1开始到最后)
这个排序算法的思想就是,默认将第一个数设为最小值,用其后的每一个数与最小数作比较,如果该数比最小值小,则两数交换位置,两次循环完毕,从左到右就完成了递增排序追问

第九行还是不太明白,为什么要用i=k+1?

追答

这个i与第一次出现的i不一样,名字虽然一样,但是这里你可以把它看成另一个变量j,
j用来遍历数组a中第k个数之后的所有数据,即假设k=0,那么j依次从1,到n-1遍历数组

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-21
那个是设第一个为min,再和后面的所有相比较,然后在拿第二个和后面所有的相比较,所以要用两个循环,至于后面最小数,只要满足上面条件,两个数交换位置。两数交换用三个式子达成知道吧!追问

这是最简单的吗?

追答

这个是冒泡法吧,c中的经典双循环嵌套,至于简单不,只要逻辑过来了,就不难了!

追问

交换最小数和第k个数不太懂?

追答

我拿第一个数举例,首先,假如第一个数最小,令min=a(0),min_k=0,然后进入循环判断a(1,2,3……(i>k))与a(0)的大小,若后面有个数(假如第三个)比第一个(a(o))小,那么,令min=a(3)(最小数),min_k=3(最小数脚标) 然后,要把最小数还给a(k),因为要依次输出a(0,1,2,3……) 所以,令x=a(3)(先用x把最小数装起来),a(3)=a(0),a(0)=x(现在最小数是原来的a(3),即最小数,a(3)为原来的a(0),也就是说,目前在第一位a(0)的就是所有数中最小的),当k=1,2,3……时,重复以上,就把数从小到大排列了!

总的来说,第k个数,就表示正在找的第k+1(k从0开始)小的那个数,交换呢,就是把目前最小的那个数放在第k+1位上去

本回答被提问者采纳
相似回答