冒泡排序

相邻元素比较大小,交换位置。每一轮排序结束,非有序区中最大(最小)元素确定。

    for(int i=1; i<=n-1; i++)
    {
        for(int j=1; j<=n-i-1; j++)
        {
            if(a[j] > a[j+1])
            {
                int tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    }

实际有序区大于已排序的有序区时的优化

    int lastExchangeIndex=0;//记录最后一次交换的位置
    int sortBorder=n-1;  //无序区边界
    for(int i=1; i<=n-1; i++)
    {
        bool isSorted=true;//判断序列是否为有序
        for(int j=1; j<=sortBorder; j++)
        {
            if(a[j]>a[j+1])
            {
                int tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
                isSorted=false;
                lastExchangeIndex=j;//无序区边界更新为最后一次交换的位置
            }
        }
        sortBorder=lastExchangeIndex;
        if(isSorted) break;
    }

 

posted @ 2020-09-26 09:30  yanjan  阅读(57)  评论(0)    收藏  举报