一个比较笨的算法,但是却是经常笔试的一道题。看了很多次,可惜却不能很快的写出来。今天写了一个,细细分析一下,以备以后察看。
void BubbleSort(int r[],int n)
{
int i,j,temp;
int exchange;
for(i=0;i<n-1;i++)
{
exchange = 0;
for(j=0;j<n-i-1;j++)
{
if(r[j]>r[j+1])
{
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
exchange=1;
}
}
if(!exchange)
return;
}
}
1、先说i=0的时候,
是将最大的数排到最后,通过j的循环来实现,循环完时,将最大的数排在了最后
2、i=1时的时候,
就不考虑那个最大的数了,所以j的循环上限就会少一个i。
一次类推i递增的情况。
exchange是用来判断如果一趟下来没有元素进行交换,说明排序已经完成,不用继续进行i的循环了。所以就直接退出。