
package Recursion;
//八皇后问题
public class EightQueen {
//定义一共有多少个皇后
static int max = 8;
//定义一个存放皇后位置的数组
static int[] arr = new int[max];
static int count=0;
public static void main(String[] args) {
check(0);
}
//打印皇后位置的方法
private static void print(){
for (int i = 0; i < arr.length; i++) {
// System.out.print("位置是:第"+(i+1+"行,第")+(arr[i]+1+"列")+" ");
System.out.print(arr[i]+" ");
}
count++;
System.out.println(count);
}
//判断第n+1个皇后和前面的皇后是否冲突
private static boolean judge(int n){
for (int i = 0; i < n; i++) {
//1、列相同;2、(x2-x1)/(y2-y1)=1,代表斜率为45°,在一条斜线上 abs():取绝对值
if (arr[i]==arr[n]||Math.abs(n-i)==Math.abs(arr[n]-arr[i])){
return false;
}
}
return true;
}
//放置第n+1个皇后
private static void check(int n){
if (n==max){//说明之前的8个已经放好了,不需要别的操作直接打印即可
print();
return;
}
//依次放入皇后并判断是否冲突
else {
for (int i = 0; i < max; i++) {
//先把这个皇后放到该行的第一列
arr[n]=i;
if (judge(n)){
check(n+1);
}
}
}
}
}
package Sort;
import java.util.Arrays;
//冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] arr ={3,9,-1,10,2};
int temp = 0;
//双层for循环,时间复杂度是O(n^2)
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < (arr.length-1-i); j++) {
if (arr[j+1]<arr[j]){
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
代码实现(可提前结束)
package Sort;
import java.util.Arrays;
//冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] arr ={3,9,-1,10,2};
boolean flag = false;//表示是否进行过交换的标识
int temp = 0;
//双层for循环,时间复杂度是O(n^2)
for (int i = 0; i < arr.length-1; i++) {
flag = false;//重置
for (int j = 0; j < (arr.length-1-i); j++) {
if (arr[j+1]<arr[j]){
flag=true;
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
if (!flag){
//一次交换都没有发生
break;
}
}
System.out.println(Arrays.toString(arr));
}
}