冒泡排序

#include <stdio.h>  

#define u8 unsigned char

u8 array[8] ={1,5,2,9,7,4,8,6};

u8 GetMax(u8 *Buf,u8 Length)
{
    u8 i,j,temp;
    u8 Fg_CmpOver;

    for(i=0; i<Length-1; i++)
    {
        // 本趟排序开始前,转换完成标志应为假
        Fg_CmpOver = 0;
        
        for(j=0; j<Length-1-i; j++)
        {
            // 相邻元素进行比较,若逆序就交换
            if(Buf[j] < Buf[j+1])
            {
                temp     = Buf[j];
                Buf[j]   = Buf[j+1];
                Buf[j+1] = temp;
                
                // 发生了交换,故将转换完成标志置为真
                Fg_CmpOver = 1;
            }    
        }
        
        // 本趟排序未发生交换,提前终止算法
        if(Fg_CmpOver == 0)
            break;
    }

    // 由于是从大到小排列,所以Buf[0]即为最大值
    return Buf[0];
}

void main()
{
    u8 i; 

    printf("Max = %d\n",GetMax(array,8));

    for(i=0; i<8; i++)
        printf("%d ",array[i]);

    printf("\n ");
}

posted @ 2016-02-20 17:50  _Fan_  阅读(214)  评论(0编辑  收藏  举报