#include <stdio.h>
/**
*******************************************************************************
* @brief 冒泡排序 函数
* @param [in] *ary 数据指针
* @param [in] len 数据长度
* @return None
* @note 降序排列
*******************************************************************************
*/
void BubbleSort(unsigned char *ary, unsigned char len)
{
unsigned char tmp;
unsigned char i, j;
len--; //自减1。注意不能少
for(i=0; i<len; i++) //len+1个数排序只需要len趟
{
for(j=0; j<len-i; j++) //每一趟比较到len-i结束
{
if(ary[j] < ary[j+1]) //降序排列
{
tmp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = tmp;
}
}
}
}
/**
*******************************************************************************
* @brief 冒泡排序加强版 函数
* @param [in] *ary 数据指针
* @param [in] len 数据长度
* @param [in] dir 排序方向(1--降序;0--升序)
* @return None
* @note 升降排列通用
*******************************************************************************
*/
void BubbleSortPlus(unsigned char *ary, unsigned char len, unsigned char dir)
{
unsigned char tmp;
unsigned char i, j;
len--; //自减1。注意不能少
for(i=0; i<len; i++) //len+1个数排序只需要len趟
{
for(j=0; j<len-i; j++) //每一趟比较到len-i结束
{
if((ary[j] < ary[j+1]) ^ dir)
{
tmp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = tmp;
}
}
}
}
/**
*******************************************************************************
* @brief 主 函数
* @param [in] None
* @return None
* @note
*******************************************************************************
*/
int main(void)
{
unsigned char buf[8] = {
1, 2, 5, 4, 7, 6, 3, 8};
unsigned char i;
printf("\n降序冒泡排序结果:\n");
BubbleSort(buf, 8); //冒泡排序
for(i=0; i<8; i++)
{
printf("%d \t", buf[i]);
}
printf("\n升序冒泡排序+结果:\n");
BubbleSortPlus(buf, 8, 0); //冒泡排序
for(i=0; i<8; i++)
{
printf("%d \t", buf[i]);
}
printf("\n降序冒泡排序+结果:\n");
BubbleSortPlus(buf, 8, 1); //冒泡排序
for(i=0; i<8; i++)
{
printf("%d \t", buf[i]);
}
}
运行结果: