1-冒泡排序C实现(递增递减的简单转换)

一、
函数:void Bub_Sort(int* head,int low,int high,int Bool)
参数解释
head:数组指针
[low, high]:需排序的数组范围
Bool:等于1表示从小到大排序,不等于1从大到小排序

说明
扫描数组中low到high-(i-low)范围
通过交换,使得head[j]始终为数组low到j范围的最大值
此方法每遇到更大的值需要交换一次
最多的交换次数为第一层循环次数*第二层循环次数(第二层循环每一次循环都需要交换)

#include <stdio.h>
#include <time.h>

void Bub_Sort(int* head,int low,int high,int Bool){//多次交换
    int temp;//交换
    int temp1;//优化
    for(int i=low;i<high;i++){
        temp1=high-(i-low);
        for(int j=low+1;j<=temp1;j++){
            //使得head[j]始终为最值
            //Bool等于1为递增序列,Bool不等于1为递减序列
            if((head[j]<head[j-1])==Bool){
                temp=head[j];
                head[j]=head[j-1];
                head[j-1]=temp;
            }
        }
    }
}

int main(int argc, char **argv) {
    printf("Hello, World!\n");
    int s[5];
    s[0]=2;
    s[1]=5;
    s[2]=1;
    s[3]=4;
    s[4]=3;
    
    int i=0;
    while(i<5)printf("%d ",s[i++]);
    
    printf("\n---------\n");
    Bub_Sort(s,0,4,1);
    
    int j=0;
    while(j<5)printf("%d ",s[j++]);
    return 0;
}

二、
参数解释
head:数组指针
[low, high]:需排序的数组范围

说明
该函数也可通过添加Bool参数实现顺逆排序的转换
扫描数组中low到high-(i-low)范围
使得Value指向数组该范围中的最大值
最后Value处与high-(i-low)处的值相交换
此方法第二层每循环一次需要交换一次
最多交换的次数为第一层循环的循环次数

void Bub_Sort1(int* head,int low,int high){//类冒泡,单次交换
    int Value;//记录当前最值位置
    int temp;//交换
    int temp1;//优化
    for(int i=low;i<high;i++){
        Value=low;//设定当前最值位置
        temp1=high-(i-low);
        for(int j=low+1;j<=temp1;j++){
            if(head[j]>head[Value]) Value=j;
        }
        //将Value位置的值放到末尾:head[high-(i-low)]
        temp=head[high-(i-low)];
        head[high-(i-low)]=head[Value];
        head[Value]=temp;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值