1、冒泡排序算法
冒泡排序是将数组的第一个,与后面的两两相比后,将大的往后放,在最后面的是最大的数。
然后循环将第一个数与后面的两两相比,取大的放后面。
因为每次找到最大的放在后面,所有每次循环过后,下一循环不用比较已经排好的最大数,只需要比上一循环少比较一个数。
代码:
/**
* @author Hui
*/
public class BubbleSort {
public static void main(String[] args) {
int[] nums = {12,321,4242,52,52,345,343,3,2};
// i为已找到最大值的个数
for (int i = 0;i < nums.length-1;i++){
// j为新一次循环的变量
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 num : nums) {
System.out.println(num);
}
}
}
2、二分查找(折半查找)算法
此算法需要对有序数组进行查找。
每次都取中间值进行比较,取目标值所在区域。
循环直至找到目标值。
代码:
import java.util.Scanner;
/**
* @author Hui
*/
public class BinarySearch {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] nums = {12,32,44,47,54,88,89,97,122,123,444};
int result = -1;
System.out.println("请输入你要查找的数值:");
int target = scanner.nextInt();
// 获取边界值。
int left = 0,right = nums.length;
while (left <= right){
if (target < nums[0] || target > nums[nums.length-1]){
System.out.println("您所输入的值不在范围内!");
break;
}
int middle = (left+right)/2;
if (target == nums[middle]){
result = middle;
System.out.println("查询成功!");
System.out.println("它在第" + (result+1) + "位。");
break;
}else if(target < nums[middle]){
right = middle - 1;
}else {
left = middle + 1;
}
}
}
}
3、归并
将两个有序数组合并成一个有序数组。
/**
* @author Hui
*/
public class Merger {
public static void main(String[] args) {
int[] nums1 = {3,5};
int[] nums2 = {2,4,6};
int[] nums = new int[nums1.length+nums2.length];
// 定义下标。
int i = 0,j = 0;
while (i < nums1.length || j < nums2.length){
// 判断数组1是否排完,排完则数组2剩余的全部放入。
if (i == nums1.length){
nums[i+j] = nums2[j];
j++;
// 跳出不执行两数组判断。
continue;
}else if (j == nums2.length){
nums[i+j] = nums2[i];
i++;
continue;
}
// 两数组对应下标判断,取小值放入新数组。
if (nums1[i] < nums2[j]){
nums[i+j] = nums1[i];
i++;
}else if (nums1[i] >= nums2[j]){
nums[i+j] = nums2[j];
j++;
}
}
for (int num : nums) {
System.out.println(num);
}
}
}
4、杨辉三角
打印一个杨辉三角。
代码:
/**
* @author Hui
*/
public class YangHui {
public static void main(String[] args) {
// 杨辉三角的高度。
int max = 7;
// 定义一个二维数组。
int[][] array = new int[max][];
// 定义每一层的大小。
for (int i = 0; i < max; i++) {
array[i] = new int[i+1];
}
// 填充杨辉三角。
for (int i = 0; i < max; i++) {
for (int j = 0; j < array[i].length; j++) {
// 凡是两边,都填充1。
if (j == 0 || j == array[i].length-1){
array[i][j] = 1;
continue;
}
// 剩余的按规律来。
array[i][j] = array[i-1][j-1] + array[i-1][j];
}
}
// 打印看结果
for (int i = 0; i < max; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
}
可自行对杨辉三角打印进行优化。
注:本人水平有限,本文仅为个人理解,若有错漏缺点不可避免,望读者批评指正。
版权声明:本文为weixin_45450352原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。