1.冒泡排序
// 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.选择排序
// 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.插入排序
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.快速排序
4.1递归
4.2递归练习
// 递归
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);
}
}
递归就是不断调用方法一层层的进栈, 然后通过出口再将值赋给前一个方法, 一层层的出栈得到最终的结果的.
4.3快速排序
注意:
1.必须先移动右边的指针, 因为只有这样才能保证与基准数交换的数字是比基准数小的, 这样才能保证左边的数都比基准数小, 右边的数都比基准数大.
2.左边的指针需要从起始位置开始, 也就是基准数位置, 不然可能会存在j = i+1时不交换的情况.
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);
}