左神算法课程基础笔记-第一章-认识时间复杂度以及排序算法

本文详细介绍了异或在数组元素交换中的应用,以及冒泡排序、选择排序和直接插入排序的原理和时间复杂度。通过实例解析了如何利用异或找到数组中奇数次出现的数,同时深入讲解了三种经典的排序算法的操作流程及其效率。
摘要由CSDN通过智能技术生成

目录

1.异或在数组两元素交换中的妙用

2.冒泡排序 

3.选择排序

4.直接插入排序


1.异或在数组两元素交换中的妙用

eor存储着两个元素异或后的结果,异或:二进制运算中同一位如果相同则异或后为0,不相同则异或后为1。  a:1101,b:1001 异或后为 eor:0100 。 b=a^eor,a=b^eor。  

void swap(int arr[],int i,int j)
{
    //不能修改同一位置不让会使其异或为0
    if(i!=j) {
        int eor = arr[i] ^ arr[j];
        arr[i] = eor ^ arr[i];
        arr[j] = eor ^ arr[j];
    }
}

Example:找到数组中1个奇数次的数。 12323 

void find_1(int []arr)
{

    int eor=0;
    for (int i = 0; i < sizeof(arr)/sizeof(int); ++i)
    {
        eor^=arr[i];
    }
    cout<<"出现奇数次的数为:"<<eor<<endl;
}

Example:找到数组中2个奇数次的数。 12312313

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值