一·二分查找算法
基本的二分查找,剩下两种有时间搞明白再写
思路:
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,直到分到一时,微调一下顺序就可以达到排序的目的了。
五·总结
这几个都学过,思路很简单,细节是魔鬼,刷题无限被吊打。