双向冒泡
#include <stdlib.h>
int main()
{
int arr[] = { 9,8,7,7,5,6,1,2,0,0 };
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < (9-i); j++)//找最大
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
for (int k = 9; k > i; k--)//找最小
{
if (arr[k-1] > arr[k])
{
int temp = arr[k-1];
arr[k - 1] = arr[k];
arr[k] = temp;
}
}
}
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return(0);
}
可优化:
1、可以在函数的开始定义一个flag=false,产生交换后置为true;如果在之后的某一趟遍历中没有产生交换,即flag=false就说明表有序,直接返回就可。
2、使用while,定义上下界,找到最大或最小后,修改上下界

浙公网安备 33010602011771号