for语句的排序及循环问题

img


问题如图

这是选择排序法。
第一轮i=0,从数组的0到7下标中找出最大值8,将其交换到数组0下标中
第二轮时最大值8已经在数组0下标中了,数组0下标就不需要再去比较了,这时i=1,就是从数组的1到7下标中找出剩下的最大值7,将其交换到数组1下标中
第三轮时最大两个值8、7已经在数组0、1下标中了,这时i=2,就是从数组的2到7下标中找出剩下的最大值6,将其交换到数组2下标中
如此循环下去就都排序好了


for (i = 0; i <=7; i++)
{
    b = i; // 将变量 b 设置为当前循环值
    c = a[i]; // 将当前循环值作为下标获取数组中对应的值
    for (d = i + 1; d <= 7; d++) // 从当前外层循环值+1开始二层循环
    {
        if (c <= a[d]) // 如果内层循环值对应数组下标的值大于外层循环值对应数组下标的值或更新后的值,则更新外层循环中,记录的下标(b)和值(c)
        {
            b = d;
            c = a[d];
        }
    }
    if (i != b) // 如果记录的下标和外层循环值不一致,则调换这两个下标对应的值
    {
        e = a[i];
        a[i] = a[b];
        a[b] = e;
    }
}