该回答引用ChatGPT
在冒泡排序中,每一趟比较之后,数组的最大元素都会移动到最后的位置。所以在后续的趟比较中,最大元素之后的元素就不需要再比较了。
可以这样修改程序:
#include "stdio.h"
void main()
{
int i,j;
int array[10] = {16,32,20,7,16,25,34,3,22,1};
int temp;
printf("\nThe original array is:\n");
for(i=0;i<10;i++)
printf("%d",array[i]);
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++) //修改的地方
if(array[j]>array[j+1])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
printf("\nThe sorted array is: \n");
for(i=0;i<10;i++)
printf("%d",array[i]);
}
主要的修改是:
内层for循环的循环变量j的范围修改为0到9-i。
因为外层for循环的变量i表示排序趟数,每一趟排序后,数组的最后i个元素是已排序的状态,不需要再比较。所以内层比较的范围可以减少为前9-i个元素。
这个修改使得比较次数从原来的9x9=81次减少为9+8+7+...+1=45次。效率有了较大提高。
这个改进思路对于任何排序算法来说都适用。通过减少已排序元素的比较次数,可以提高排序效率。
这不是标准冒泡排序吗
你不能先看看书上是怎么写的,一定要自己搞吗