问题就是让他在while不成立时也输出比较次数
上代码,看注释就行
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
int arr[10];
int i;
for(i=0;i<10;i++)
scanf("%d",&arr[i]);
int lenght, temp, j,flag=1;
int Comparison_times = 0, Move_times = 0;
int preIndex;
for (i = 1; i < 10; i++) {
preIndex = i - 1;
temp = arr[i];
while (preIndex >= 0 && arr[preIndex] > temp) {
Comparison_times++;
arr[preIndex + 1] = arr[preIndex];
preIndex--; Move_times++;flag=0;
}
if(arr[preIndex] <= temp) flag=1;//代表有一次成立但preIndex移动后比较就不成立了 但此时也有比较
if(flag==1) Comparison_times++;//代表不成立的比较情况
arr[preIndex + 1] = temp;
if(preIndex+1!=i) Move_times++;//代表当有移动时才加一,没有移动就不管
}
printf("%d %d", Comparison_times, Move_times);
return 0;
}