以下数组皆采用 int[] arr = {30,45,23,24,89,20};
- 冒泡排序(相邻两个元素进行比较,每次选出一个最大值放在最后面)
for (int i = 0; i < arr.length - 1; i++) {
// 每一轮都是从头开始两个元素进行比较 比较最大次数为每一轮 - 1 因为每次选出最大值后不再参与比较
for (int j = 0; j < arr.length - i - 1; j++) {
// 如果后者大于前者 则进行交换
if (arr[j] > arr[j + 1]) {
int t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
2.选择排序(每次选出一个最小值放在最前面,假设第一个是最小值依次与后面的数进行比较,如果碰到比假设最小值还小的数则进行交换,以此类推)
for (int i = 0; i < arr.length - 1; i++) {
// 假设每一轮的第一个数为最小值
int minIndex = i;
// 假设的最小值与后面的元素一一比较
for (int j = i + 1; j < arr.length; j++) {
// 当碰到比第一个数还小的数 则交换最小值的下标
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
// 如果每一轮的最小值与假设的最小值不同 则交换两个数的位置
if (minIndex != i) {
int t = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = t;
}
}
3.插入排序(每一轮都是从第二个元素开始 依次与前面元素进行比较 )
for (int i = 1; i < arr.length ; i++) {
// 每一轮都是找第一个数作为基数
int t = arr[i];
// 从基数的前一个数开始进行比较
int pos = i - 1;
// 如果前面有数大于基数 则将前面的数赋值给基数的位置 直到小于基数停止此轮
while (pos >= 0 && arr[pos] > t) {
arr[pos + 1] = arr[pos];
pos--;
}
arr[pos + 1] = t;
}
4.希尔排序(类似于优化版的插入排序)
int gap = arr.length;
while (true) {
gap /= 2;
// 每一轮进行一次插入排序
for (int i = 0; i < gap; i++) {
// 插入排序
for (int j = i + gap; j < arr.length; j += gap) {
int t = arr[j];
int pos = j - gap;
while (pos >= 0 && arr[pos] > t) {
arr[pos + gap] = arr[pos];
pos--;
}
arr[pos + gap] = t;
}
}
if (gap == 1) {
break;
}
}
5.快速排序(采用递归分治的思想)
public static void quickSort(int[] arr, int start, int end) {
int i = start;
int j = end;
int pivot = arr[start];
while (i < j) {
// 从后向前
while (i < j && arr[j] > pivot) {
j--;
}
arr[i] = arr[j];
i++;
// 从前向后
while (i < j && arr[i] < pivot) {
i++;
}
arr[j] = arr[i];
j--;
if (i - 1 > start) {
quickSort(arr, start, i - 1);
}
if (j + 1 < end) {
quickSort(arr, j + 1, end)
}
}
}
6.二分法查找
int start = 0;
int end = arr.length - 1;
while (start <= end) {
int mid = (start + end) / 2;
if (arr[mid] > key) {
end = mid - 1;
} else if (arr[mid] < key) {
start = mid + 1;
} else {
return mid;
}
}
return -1;
7.杨辉三角
int[][] arr = new int[7][];
for (int i = 0; i < arr.length; i++) {
// 给每一行创建空间
arr[i] = new int[i + 1];
for (int j = 0; j < arr[i].length; j++) {
if (i == j || j == 0) {
arr[i][j] = 1;
} else {
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
System.out.print(arr[i][j]+" ");
}
System.out.println();
}