关于c语言的一个简单排序问题,看下图,为什么要用2个for循环,而且还要用a[i]和a[k]两种数组,下面的交换最小数是怎么回事???
第九行还是不太明白,为什么要用i=k+1?
追答这个i与第一次出现的i不一样,名字虽然一样,但是这里你可以把它看成另一个变量j,
j用来遍历数组a中第k个数之后的所有数据,即假设k=0,那么j依次从1,到n-1遍历数组
这是最简单的吗?
追答这个是冒泡法吧,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位上去
本回答被提问者采纳