两两相互比较,把大的放后面小的放前面,就是冒泡排序
冒泡排序有两处优化
1.当本轮排序没有元素交换位置,说明排序已经结束。
2.记录本轮最后一次交换位置的元素,因为这个位置后面的元素没有发生过交换,说明这个位置后面的元素都是有序的
void BubbleSort(int arr[],int nLength)
{
if(arr == NULL || nLength <=0)return;
int i;
int j;
int nFlags = 0;
for(i = 0;i<nLength-1;i++)
{
nFlags = 0;
for(j = 0;j<nLength-i-1;j++)
{
if(arr[j] > arr[j+1])
{
arr[j] = arr[j]^arr[j+1];
arr[j+1] = arr[j]^arr[j+1];
arr[j] = arr[j]^arr[j+1];
nFlags = j+1;
}
}
if(nFlags == 0)
break;
//标记前面有j+1个元素,也就是要再进行j次循环,等式两边都是循环次数
//nFlags-1 = nLength-1-i;
//i = nLength-nFlag 因为i要++,所以还要减1
i = nLength-nFlags-1;
}
}