1.冒泡,相邻数交换
public static void bubbleSort(int[] arr) {
int temp;
// 外层循环一次冒一个泡, 要冒length-1次泡,注意是从1开始
for (int i = 1; i < arr.length; i++) {
// 内层控制冒出的泡在各个位置的交换过程
for (int j = 0; j < (arr.length - i); j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
2.选择排序1,从第i个和之后的数依次比较,确定是否交换位置,做了一些无用功
public static void selectionSort1(int[] arr) {
int temp;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
选择排序2,用min记录第i个之后最小的数的下标,然后判断是否交换,确定最小数的下标,第二个判断是判断第i个数是不是就是最小的了
public static void selectionSort2(int[] arr) {
int temp;
for (int i = 0; i < arr.length - 1; i++) {
int min = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j;
}
// if (i != min) {//一不小心放在这里, 很坑爹啊
// temp = arr[i];
// arr[i] = arr[min];
// arr[j] = temp;
// }
}
if (i != min) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
3.折半查找法
public static int binarySearch(int i, int[] arr) {
int startIndex = 0;
int endIndex = arr.length - 1;
int middleIndex = 0;
while (startIndex <= endIndex) {
middleIndex = (startIndex + endIndex) / 2;
if (arr[middleIndex] == i) {
return middleIndex;
} else if (arr[middleIndex] > i) {
endIndex = middleIndex - 1;
} else if (arr[middleIndex] < i) {
startIndex = middleIndex + 1;
}
}
return -1;
}
4.100个人围城一圈从第1个人开始数1,数到3的人退出圈,然后后面的人再从1数,数到3再退出,依次类推,求最后剩余人的编号(因为下标是从0开始输出的值还要加上1)
public static void main(String[] args) {
int num = 100;
boolean[] arrBool = new boolean[num];
for (int i = 0; i < arrBool.length; i++) {
arrBool[i] = true;
}
int remaider = num;//剩余的人数
int index = 0;//每个数的下标
int flag = 0;//数3计数器
while (remaider > 1) {
if (arrBool[index] == true) {
flag++;
if (flag == 3) {
flag = 0;
arrBool[index] = false;
remaider--;
}
}
index++;
if (index == num) {//到头再循环下去
index = 0;
}
}
for (int i = 0; i < arrBool.length; i++) {
if (arrBool[i]) {
System.out.println(i);
}
}
}