排序算法

#include <iostream>
using namespace std;
int binFind(int e[10],int number,int len);
int main(){
    /*冒泡升序(i从大往小)*/
    int a[]={1,9,2,3,5,7,8,4,6,0},i=0,j=0;
    int len = sizeof(a)/sizeof(a[0]);
    cout<<"len="<<len<<endl;
    for (j=1;j<=(len-1);j++) {      //外层循环一共做len-1次

        for(i=len-1;i>=(j-1);i--){    //内层循环一共做len-(首次影响)次,其中第一次影响,也就是说第一次做len-1次
            //实现上浮的冒泡排序
            //上浮排序时,i从大往小变,元素中一定要有a[len-1]
            if (a[i-1]>a[i]){
                int temp = a[i];
                a[i] = a[i-1];
                a[i-1] = temp;
            }
        }
    }
    //输出结果
    cout<<"a"<<endl;
    for (int p=0;p<len;p++){cout<<a[p]<<'\t';}
    cout<<endl;


    i=0;j=0;
    /*冒泡降序(i从小往大)*/
    int b[]={1,9,2,3,5,7,8,4,6,0};
    int len1 = sizeof(b)/sizeof(b[0]);
    cout<<"len1="<<len1<<endl;
    bool flag=1;
    for (j=1;j<=(len1-1)&&flag;j++) {      //外层循环一共做len1-1次
        flag = 0;
        for(i=0;i<=len1-j-1;i++){    //内层循环一共做len1-(首次影响)次,其中第一次影响,也就是说第一次做len1-1次
            //实现上浮的冒泡排序
            //上浮排序时,i从小往大变,元素中一定要有b[0]
            if (b[i+1]>b[i]){
                int temp = b[i];
                b[i] = b[i+1];
                b[i+1] = temp;
                flag = 1;     //如果flag=1,代表排序还不完全,还需要继续排序
                              //如果flag=0,代表排序完全,不需要继续排序了
            }
        }
    }
    //输出结果
    cout<<"b"<<endl;
    for (int p1=0;p1<len1;p1++){cout<<b[p1]<<'\t';}
    cout<<endl;



    /*选择排序*/
    int c[]={1,9,2,3,5,7,8,4,6,0};
    int len2 = sizeof(c)/sizeof(c[0]);
    cout<<"len2="<<len2<<endl;
    for ( i=0;i<(len2-1);i++){//第一个循环len2-1次,即选中第一个元素 到 倒数第二个元素
        for( j=i+1;j<len2;j++){//第二个循环 从第二个元素 到 最后一个元素
            if (c[j]<c[i]){
                int temp = c[i];
                c[i] = c[j];
                c[j] = temp;
            }
        }
    }
    //输出结果
    cout<<"c"<<endl;
    for (int p2=0;p2<len2;p2++){cout<<c[p2]<<'\t';}
    cout<<endl;

    /*直接选择排序*/
    int d[]={1,9,2,3,5,7,8,4,6,0};
    int len3 = sizeof(d)/sizeof(d[0]);
    cout<<"len3="<<len3<<endl;
    for ( i=0;i<(len3-1);i++){//第一个循环len2-1次,即选中第一个元素 到 倒数第二个元素
        int k = i;
        for( j=i+1;j<len2;j++){//第二个循环 从第二个元素 到 最后一个元素
            if (d[j]<d[i]) k = j ;
        }
        if (k!=i){
            int temp = d[i];
            d[i] = d[k];
            d[k] = temp;
        }
    }
    //输出结果
    cout<<"d"<<endl;
    for (int p3=0;p3<len3;p3++){cout<<c[p3]<<'\t';}
    cout<<endl;

    /*二分排序*/
    int e[]={0,1,2,3,4,5,6,7,8,9};
    int len4 = sizeof(e)/sizeof(e[0]);
    cout<<"len4="<<len4<<endl;
    int Number = 8;
    cout<<"二分查找算法,应该输出9"<<endl;
    cout<<binFind(e,Number,len4)<<endl;

    return 0;
}
int binFind(int* e,int number,int len){
    int start = 0;
    int end = len-1;
    int now;
    while(start<end){
        now = (start+end)/2;
        if(e[now]==number){
            return now+1;
        }else{
            if(e[now]<number){
                start = now+1;
            }else{
                end  = now-1;
            }
        }
    }
    cout<<"没有找到数字9"<<endl;
    return -1;
}






输出结果为:

len1=10
b
9 8 76 5 4 3 21 0
len2=10
c
0 1 23 4 5 6 78 9
len3=10
d
0 1 23 4 5 6 78 9
len4=10
二分查找算法,应该输出9
9


Process finished with exit code 0




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值