本人学习使用,一千个人有一千个哈姆雷特,算法代码每个人写法不一样属于正常现象,仅供参考
目录
一、排序算法
1、冒泡排序
每一轮都是两两相比,大的靠后站,经过一轮下来,会将最大的冒到最后边。
代码实现:
java:
public class Bubble {
public static void main(String[] args) {
int[] nums = {4,5,9,1,3,7,3};
for(int i = 0;i < nums.length - 1;i++){
for(int j = 0;j < nums.length - 1 -i;j++){
if(nums[j] > nums[j+1]){
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
for(int i = 0;i < nums.length;i++){
System.out.println(nums[i]);
}
}
}
2、归并排序
给你两个有序数组,合并成一个大的有序的数组
归并思路如下:
1、同时遍历两个数组,遍历的当前值进行比较,小的放入新数组。
2、放进去之后,数据继续遍历,指针后移。
3、经过多次遍历
代码实现:
Java:
public class Merge {
public static void main(String[] args) {
int[] array1 = {1, 3, 5, 8, 12, 35, 54, 456, 2545};
int[] array2 = {2, 4, 7, 10, 40, 60};
int i = 0;
int j = 0;
int[] newArray = new int[array1.length + array2.length];
while (i < array1.length || j < array2.length) {
if (i == array1.length) {
newArray[i + j] = array2[j];
j++;
continue;
}
if (j == array2.length) {
newArray[i + j] = array1[i];
i++;
continue;
}
if (array1[i] < array2[j]) {
newArray[i + j] = array1[i];
i++;
} else {
newArray[i + j] = array2[j];
j++;
}
}
for (int i1 : newArray) {
System.out.print(i1 + " ");
}
}
}
二、查找算法
1、二分查找(折半查找)
【举个例子】,你去图书馆找一本书,如果你知道这个书架上的书是按照编号有序排列,你会从头开始一个一个找吗?
你大概的思路是这样的,先去中间看看,如果我找的书的编号比中间的大我就去左边找,否则去右边找。
这种思路就是我们的二分查找法
java:
import java.util.Scanner;
public class BinarySearch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] nums = {1, 4, 7, 9, 12, 33, 45, 67, 89};
int target = sc.nextInt();
if(target > nums[nums.length-1] || target < nums[0]) {
System.out.println("查找的数字不存在!");
}else{
int left = 0, right = nums.length - 1;
int rel = -1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == target) {
rel = mid;
break;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
if(rel == -1) {
System.out.println("查找的数字不存在!");
}else{
System.out.println(rel);
}
}
}
}