
c语言中冒气泡法一直学不懂,请根据该图讲的简单详细一点。将对了有十分。
2个回答
展开全部
起泡法有两种方式,一种是每次循环,将最大的元素沉底;一种是每次外层循环将最小的元素升起。你这里给出的算法就是后者。
外层循环对应与你给出的算法里的i的循环,从1到n-1,循环n-1次,对应每一个i的值,都将有一个最小的元素上浮到第i-1个位置,并且i-1前面的元素已经从小到大有序。
比如i=1时,pj指向最后一个元素1,然后判断pj指向的元素前面的元素和pj指向元素的大小关系,如果pj-1指向的元素大于pj指向的元素,则交换二者,然后pj指向前一个元素位置,直到pj>p+i-1,这里p指向的是数组的首地址,i=1时,p+i-1就是p+0,所指向的就是数组首地址,此时i=1,所以本次循环结束数组中最小元素会浮出到第i-1=0个元素位置。综合看来,每次外层循环i的值就是数组最前面已经从小到大排好的序列个数+1。比如i=3时,表示本次外层循环正在进行时,前面已经有2个元素有序,本次循环结束时已经有三个元素排好序,从小到大依次排在数组最前面。
外层循环对应与你给出的算法里的i的循环,从1到n-1,循环n-1次,对应每一个i的值,都将有一个最小的元素上浮到第i-1个位置,并且i-1前面的元素已经从小到大有序。
比如i=1时,pj指向最后一个元素1,然后判断pj指向的元素前面的元素和pj指向元素的大小关系,如果pj-1指向的元素大于pj指向的元素,则交换二者,然后pj指向前一个元素位置,直到pj>p+i-1,这里p指向的是数组的首地址,i=1时,p+i-1就是p+0,所指向的就是数组首地址,此时i=1,所以本次循环结束数组中最小元素会浮出到第i-1=0个元素位置。综合看来,每次外层循环i的值就是数组最前面已经从小到大排好的序列个数+1。比如i=3时,表示本次外层循环正在进行时,前面已经有2个元素有序,本次循环结束时已经有三个元素排好序,从小到大依次排在数组最前面。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询