1.冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] arr = new int[] { 3, 5, 1, 2, 6, 4 };
System.out.println("排序前数组为:");
for (int num : arr) {
System.out.print(num + " ");
}
sort(arr);
System.out.println();
System.out.println("排序后的数组为:");
for (int num : arr) {
System.out.print(num + " ");
}
}
public static void sort(int[] arr) {
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 num = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = num;
}
}
}
}
}
2.选择排序
public class SelectionSort {
public static void main(String[] args) {
int[] arr = new int[] { 3, 5, 1, 2, 6, 4 };
System.out.println("排序前");
for (int num : arr) {
System.out.print(num + " ");
}
for (int i = 0; i < arr.length - 1; i++) {// 做第i趟排序
int min = i;
for (int j = min + 1; j < arr.length; j++) {// 选最小的记录
if (arr[j] < arr[min]) {
min = j;// 记下目前找到的最小值所在的位置
}
}
// 在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换
if (i != min) { // 交换a[i]和a[min]
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
System.out.println();
System.out.println("排序后");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
3.快速排序
public class QuickSort {
public static void main(String[] args) {
int[] arr = { 3, 5, 1, 2, 6, 4 };
System.out.println("排序前数组为:");
for (int num : arr) {
System.out.print(num + " ");
}
int start = 0;
int end = arr.length - 1;
sort(arr, start, end);
System.out.println();
System.out.println("排序后的数组为:");
for (int num : arr) {
System.out.print(num + " ");
}
}
public static int getMiddle(int[] arr, int start, int end) {
int key = arr[start];
while (start < end) {
// 从后往前比较
if (arr[end] >= key) {// 如果比关键值大,比较下一个,直到有比关键值小的交换位置,然后从前往后比较
end--;
}
arr[start] = arr[end];
// 从前往后比较
if (arr[start] <= key) {
start++;
}
arr[end] = arr[start];
}
arr[start] = key;
return start;
}
public static void sort(int[] array, int start, int end) {
if (start >= end) {
return;
}
int index = getMiddle(array, start, end);
sort(array, start, index - 1);
sort(array, index + 1, end);
}
}