Java的四种排序方法
- 冒泡排序
public static void bubble_sort( int[] a ) {
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - i - 1; j++) {
if (a[j] > a[j+1]) {
// 交换(大数放到后面)
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
2.选择排序:
public static void select_sort (int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i; // 用来记录最小值的索引位置,默认值为i
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j; // 遍历 i+1~length 的值,找到其中最小值的位置
}
}
// 交换当前索引 i 和最小值索引 minIndex 两处的值
if (i != minIndex) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
// 执行完一次循环,当前索引 i 处的值为最小值,直到循环结束即可完成排序
}
}
选择排序算法思想:
遍历元素找到一个最小(或最大)的元素,把它放在第一个位置,然后再在剩余元素中找到最小(或最大)的元素,把它放在第二个位置,依次下去,完成排序。
3.插入排序
public static void insert_sort(int[] arr) {
int j; // 已排序列表下标
int t; // 待排序元素
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) {
t = arr[i]; // 赋值给待排序元素
for (j = i - 1; j >= 0 && arr[j] > t; j--) {
arr[j + 1] = arr[j]; // 从后往前遍历已排序列表,逐个和待排序元素比较,如果已排序元素较大,则将它后移
}
arr[j + 1] = t; // 将待排序元素插入到正确的位置
}
}
}
插入排序算法思想:
① 从第一个元素开始,该元素可以认为已经排好序。
② 取出下一个新元素,然后把这个新元素在已经排好序的元素序列中从后往前扫描进行比较。
③ 如果该元素(已排序)大于新元素,则将这个已排序的元素移到下一个索引位置。
④ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。
⑤ 将新元素插入到该已排序的元素的索引位置后面。
⑥ 重复步骤2-5
4.快速排序
public static int[] quick_sort(int[] arr, int left, int right) {
if (left < right) {
int partitionIndex = partition(arr, left, right);
quick_sort(arr, left, partitionIndex - 1);
quick_sort(arr, partitionIndex + 1, right);
}
return arr;
}
public static int partition(int[] arr, int left, int right) {
// 设定基准值(pivot)
int pivot = left;
int index = pivot + 1;
for (int i = index; i <= right; i++) {
if (arr[i] < arr[pivot]) {
swap(arr, i, index);
index++;
}
}
swap(arr, pivot, index - 1);
return index - 1;
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
快速排序算法思想:
① 从数列中挑出一个元素,称为 “基准"(pivot)
② 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
③ 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序.
这其实是我copy的老师的PPT,嘿嘿嘿😁