常用的两个算法

冒泡排序
//  2   5   3   1   8
    int arrNum[5] = {2, 5, 4, 1, 8};
    //让数组元素由小到大排列  1   2   3   5   8
    //两两相互比较(相邻的两个元素),发现不符合要求的排列顺序调整两元素的相互位置。
    //25318   第一对
    //23518   第二对
    //23158
    //23158          最后一个元素一定是一个最大的元素  4
    
    //23158
    //21358
    //21358          倒数第二个元素一定是第二大的元素  3
    
    //12358
    //12358          倒数第三个元素一定是第三大的元素  2
    
    //12358          倒数第四个元素一定是第四大的元素  1
    //冒泡算法实现   i    j
    //外层循环执行了  n - 1
    for (int i = 0; i < 4; i ++) {
        //最大索引号可以到 3   3 + 1
        
        //内层循环执行了  n - i - 1 --> n / 2 - 1
        for (int j = 0; j < 4 - i; j ++) {
            
            if (arrNum[j] > arrNum[j + 1]) {
                //调整元素位置
//                int val = arrNum[j];
//                arrNum[j] = arrNum[j + 1];
//                arrNum[j + 1] = val;
                
                arrNum[j] ^= arrNum[j + 1];
                arrNum[j + 1] ^= arrNum[j];
                arrNum[j] ^= arrNum[j + 1];
                
            }
        }
    }
    //算法结束
    
    for (int i = 0; i < 5; i ++) {
        printf("----%d-----\n", arrNum[i]);
    }




选择排序
 //选取一个元素(一般一次选第一个,第二个,第三个。。。第 N - 1 个),依次的和其他元素作比较,不符合条件调整元素位置。
    
    int arrNum2[5] = {4, 8, 9, 2, 1};
    
    //选择排序
    //48921   4 8
    //48921   4 9
    //28941   4 2
    //18942   2 1    第一趟  最小值确定在第一个位置
    
    //18942   8 9
    //14982   8 4
    //12984   4 2    第二趟  第二小的数字确定了,在第二个位置
    
    //12894   9 8
    //12498   8 4    第三趟  第三小的数字在第三个位置
    
    //12489   9 8    第四趟  第四小的数字在第四个位置
    
    //外层循环对应的是循环的趟数
    for (int i = 0 ; i < 4; i ++) {
        //内层循环是将元素两两比较  (不一定是相邻的元素)
        for (int j = i; j < 4; j ++) {
            if (arrNum2[i] > arrNum2[j + 1]) {
                //中间变量  val
                int val = arrNum2[i];
                arrNum2[i] = arrNum2[j + 1];
                arrNum2[j + 1] = val;
            }
        }
    }
    
    for (int i = 0; i < 5; i ++) {
        printf("选择排序:%d \n", arrNum2[i]);
    }


递归
//斐波那契数列   函数体中调用函数自身
//输入一个  返回相应的值
//  1  1     2  1    3  2
int feb(int index){


    //当索引值 为  1  或者  2  返回1
    if (index == 1 || index == 2) {
        return 1;
    }else{
        //当索引值为  3.4.5.6....  返回前两个斐波那契额数列的值的和
        return feb(index - 1) + feb(index - 2);
    }
    
}


//递归思想实现阶乘
int fac(int index){
   
    //当索引为1  返回1
    if (index == 1) {
        return  1;
    }else{
        //当索引为  2.3.4.5....放回  index *(index-1的阶乘)
        return index * fac(index - 1);
    }
    
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值