跪求帮忙分析一下程序的含义,运行结果是用插入法对数组a降序排序,但不知循环里面到底是什么意思
发布网友
发布时间:2022-05-18 10:17
我来回答
共3个回答
热心网友
时间:2023-10-14 17:11
m先把a[i]的值存放起来;
j=i-1;就是使a[j]成为a[i]左边的那个元素;
while(j>=0&&m>a[j])
{
a[j+1]=a[j];
j--;
}
这个循环就是把a[i]的值不断和左边的值做比较,如果左边的值是小于它的,就把那个值往右移动一个位置,当找到一个比a[i]的值大的值时,循环就会停止,这时a[j]指向的是比a[i]大的那个值。
a[j+1]=m;
最后这里,就是把m(原来a[i]的值)放在比它大的那个值的右边
下面,for循环继续执行
热心网友
时间:2023-10-14 17:12
#include "stdio.h"
void main ()
{
int a[5]={4,7,2,5,1},i,j,m;
//插入排序的基本思想是:先处理数组前面的一部分,使其有序例如,当i为2时,那么a[0],a[1]是有序的:4,7
//现在处理决定a[2]=2的位置。这时进入while循环,将所有大于a[2]的数据向前移动,7大于2,所以它向前移
//这样是4,7,7,4大于2,也向前移这样是4,4,7,然后2会被放入4的位置,由于j=-1,while循环结束。
//当while完成后,再将a[2]=2的值放入它应该放入的位置。这样a[2]以前的数组就是有序的了,
//a的情况现在为2,4,7,5,1,接下来处理a[3]=5.....
for(i=1;i<5;i++)
{
//这次循环处理的值。
m=a[i];
//然后开始依次比较m和i之前的数组中的值,按照从小到大的顺序排列。
j=i-1;
while(j>=0&&m>a[j])
{//将小于a[j]的所有值向前移,或者直到数组越界
a[j+1]=a[j];
j--;
}
//将m放入适当的位置
a[j+1]=m;
//建议这样写以跟踪数组a的情况:
for(i=0;i<5;i++)
{
printf("%d",a[i]);
}
}
for(i=0;i<5;i++)
{
printf("%d",a[i]);
}
}
热心网友
时间:2023-10-14 17:12
循环就是向左查找到M要正确插入的位置嘛。
不懂可追问,祝楼主学习愉快!追问没懂。。。跪求逐行分析,尤其是while的终止条件