c语言: 冒泡排序

本文详细介绍了几种冒泡排序算法的实现方式,包括基本冒泡排序、改进版冒泡排序等,并给出了具体的C语言代码实现。通过对比不同版本的冒泡排序,读者可以深入理解冒泡排序的工作原理及其优化思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void swap(char* a, char* b)
{
	if(a == 0 || b == 0){
		return;
	}

	*a = *a ^ *b;
	*b = *a ^ *b;
	*a = *a ^ *b;
}

//假的冒泡排序(沉底排序,不好) char* bub_sort(char* ch, int n) { int i,j; if(ch == 0){ return 0; } for(i = 0; i < n - 1; i++){ for(j = i + 1; j <= n - 1; j++){ if(ch[i] > ch[j]){ swap(ch + i, ch + j); } } } return ch; } //改进后的假的冒泡排序(沉底排序,还是不好)
char* bub_sort_b(char* ch, int n) { int i,j,m; if(ch == 0){ return 0; } for(i = 0; i < n - 1; i++){ m = i; for(j = i + 1; j <= n - 1; j++){ if(ch[m] > ch[j]){ m = j; } } if(i != m) swap(ch + i, ch + m); } return ch; }

 

冒泡排序:

void BasicBubble(char *myArray, int Length)
{
    for(int i = 0; i < Length - 1; i++)          //循环的趟数: Length
    {
        for(int j = 0; j < Length - 1 - i; j++)//每趟循环比较的次数: Length - 1 - i
        {
            if( myArray[j] > myArray[j+1] )
            {
                swap(myArray+j, myArray+j+1);
            }
        }
    }
}

改进的冒泡排序
/// 设置一个标志位,当没有交换的时候这个标志位不会变化,那么说明数据已经
/// 排序好了,就不需要再进行剩余的循环。只有在标志位被重新设置的情况下才会
/// 进行剩余的循环。
void ImproveBubble1(char *myArray, int Length)
{
    bool isSorted = false; 

    for(int i = 0; i < Length - 1 && !isSorted; i++)//只有在没有排序的情况下才继续循环
    {
        isSorted = true;                                                      //设定排序标志
        for(int j = 0; j < Length - 1 - i; j++)
        {
            if( myArray[j] > myArray[j+1] )
            {
                isSorted = false;                                             //如果是没有排序,就重新设定标志
                swap(&myArray[j], &myArray[j+1]);
            }
        }
    }
}

引用:

!  1. http://www.cnblogs.com/dylan_zb/archive/2011/03/29/1999130.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值