冒泡排序

两两相互比较,把大的放后面小的放前面,就是冒泡排序

冒泡排序有两处优化

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;
    }
}
原文地址:https://www.cnblogs.com/TheQi/p/9103758.html