JAVA部分算法学习(理论)

一·二分查找算法

基本的二分查找,剩下两种有时间搞明白再写
思路:

int binarySearch(int[] nums, int target) {
    int left = 0; 
    int right = nums.length - 1; //确定搜索区间

    while(left <= right) { 
        int mid =  left+(right-left)/2;//确定中间值的下标,等同于left/2+right/2,此处是为了防止溢出,一个小细节
        if(nums[mid] == target)
            return mid; //这个就是中间值等于目标值,直接返回中间值下标
        else if (nums[mid] < target)//目标值大于中间值,left变为mid+1,因为mid肯定不满足条件,又一个小细节。
            left = mid + 1;
        else if (nums[mid] > target)//目标值小于中间值,也是·同理可得
            right = mid - 1; 
        }
    return -1;//没找到满足条件的值,返回负一。
}

剩下两种寻找左侧边界的二分查找和寻找右侧边界的细节还得多去实践一波。

二·冒泡排序

思路:顾名思义冒泡排序就是冒泡,大的先浮上来,小的后浮上来。对一个数组来说就是数组中最大的先给他排到后面,然后找第二大的,排他前面一点,直到全部排完,排序结束,就获得一个升序的数组。

三·直接插入排序

又叫插入排序,适合少量元素进行排序。
思路:把一个数组分成两个数组一个数组有序,一个无序,将无序的数组里的元素一个个通过比大小按顺序插入有序数组,最后获得一个有序的大数组,排序完成。

四·希尔排序

进阶版的直接插入排序,
思路:先将数组分组,分组原则一般是按照gap/2,然后是(gap/2)/2,直到分到一时,微调一下顺序就可以达到排序的目的了。

五·总结

这几个都学过,思路很简单,细节是魔鬼,刷题无限被吊打。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值