Problem Description
对于冒泡排序,输出最少需要几趟就可以将数组有序。比如对于数组1 3 4 2,经过第一趟排序之后是1 3 2 4,
经过第二趟排序之后是1 2 3 4;那么只需要两趟排序就可以使得数组有序。
Input
多组样例。每组的第一个数是一个数字n表示数组的元素个数,后面是n个整数。1<=N<=1000
Output
经过多少趟冒泡排序可以使得数组有序。
Sample Input
4 1 3 4 2
Sample Output
2
Hint
只需考虑升序情况
#include <stdio.h>
#include <stdlib.h>
int bubble(int arr[],int times);
int main()
{
int n;
int i;
int arr[1002];
while(scanf("%d",&n)!=EOF)
{
for(i = 0;i < n; i++)
{
scanf("%d",&arr[i]);
}
printf("%d\n",bubble(arr,n));
}
return 0;
}
int bubble(int arr[],int times)
{
int tmp = 0;
int ans = 0;
int state = 1;
for(int i = 0;i < times - 1;i++)
{
if(state == 1)
{
state = 0;
for(int j = 0;j < times - i - 1;j++)
{
if(arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
state = 1;
}
}
}
else break;
ans = i;
}
return ans;
}