1. Classificação de bolhas
// bubbling sort
int[] arr = {14,23,7,35,12,3,46};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
2. Classificação de seleção
// selection sort
int[] arr = {14,23,7,35,12,3,46};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 1 + i; j < arr.length; j++) {
if (arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
3. Classificação por inserção
int[] arr = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
int NIndex = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] <= arr[i + 1]){
NIndex = i + 1;
}else {
break;
}
}
System.out.println(NIndex);
for (int i = NIndex + 1; i < arr.length; i++) {
int a = 0;
for (int j = i - 1; j >= 0; j--) {
if (arr[i - a] >= arr[j]){
break;
}else {
int temp = arr[j];
arr[j] = arr[i - a];
arr[i - a] = temp;
a++;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
4. Classificação rápida
4.1 Recursão
4.2 Exercícios de recursão
// 递归
public static void main(String[] args) {
int num = 5;
int factorial = getFactorial(num);
System.out.println(factorial);
}
private static int getFactorial(int num) {
if (num == 1){
return 1;
}else {
return num * getFactorial(num - 1);
}
}
Recursão é chamar métodos continuamente para a pilha camada por camada, depois atribuir o valor ao método anterior por meio da saída e abrir a pilha camada por camada para obter o resultado final.
4.3 Classificação Rápida
Perceber:
1. Você deve primeiro mover o ponteiro para a direita, pois só assim você pode garantir que o número trocado com o número de referência seja menor que o número de referência, para garantir que os números à esquerda sejam menores que os número de referência, e os números à direita são maiores que o número de referência.
2. O ponteiro da esquerda precisa partir da posição inicial, ou seja, a posição do número de referência, caso contrário pode ocorrer uma situação em que j = i+1 não é trocado.
public static void main(String[] args) {
int[] arr = {6,2,1,7,9,3,4,5,10,8};
quickSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
private static void quickSort(int[] arr, int i, int j) {
int start = i;
int end = j;
if (start > end){
return;
}
int baseNumber = arr[i];
while (start != end){
while (true){
if (end <= start || arr[end] < baseNumber){
break;
}
end--;
}
while (true){
if (end <= start || arr[start] > baseNumber){
break;
}
start++;
}
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
int temp = arr[i];
arr[i] = arr[end];
arr[end] = temp;
quickSort(arr, i, start - 1);
quickSort(arr, start + 1, j);
}