Java实现经典排序算法
Java作为一门面向对象的编程语言,其语法简洁、易于学习、可读性强等特点,使其尤为适合实现各种算法。在各种经典排序算法中,Java也提供了丰富的API库,方便我们实现各种排序算法。本文将对常见的几种经典排序算法进行详细介绍。
一. 冒泡排序
冒泡排序是一种基础的排序算法,其思想是通过比较相邻两个元素的大小,将较大的元素往后移动。通过多次重复这个过程来实现整个数组的排序。
Java代码实现:
public static void bubbleSort(int[] nums) {
int len = nums.length;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
}
二. 选择排序
选择排序是一种简单的排序算法,其思想是依次选择数组中的最小值,放置于数组的起始位置,然后再在剩下的元素中选择最小值放置到数组的下一个位置。重复这个过程直到数组排序完成。
Java代码实现:
public static void selectionSort(int[] nums) {
int len = nums.length;
for (int i = 0; i < len - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < len; j++) {
if (nums[j] < nums[minIndex]) {
minIndex = j;
}
}
int temp = nums[i];
nums[i] = nums[minIndex];
nums[minIndex] = temp;
}
}
三. 插入排序
插入排序是一种更有效的排序算法,其思想是依次将数组中的元素插入到已排序的部分中,以达到排序的目的。
Java代码实现:
public static void insertionSort(int[] nums) {
int len = nums.length;
for (int i = 1; i < len; i++) {
int temp = nums[i];
int j = i - 1;
while (j >= 0 && nums[j] > temp) {
nums[j + 1] = nums[j];
j--;
}
nums[j + 1] = temp;
}
}
四. 希尔排序
希尔排序介于插入排序和快速排序之间,其思想是将数组分成若干个子序列,进行插入排序,然后逐步缩小子序列的大小,最终完成排序。
Java代码实现:
public static void shellSort(int[] nums) {
int len = nums.length;
int gap = len / 2;
while (gap > 0) {
for (int i = gap; i < len; i++) {
int temp = nums[i];
int j = i;
while (j >= gap && nums[j - gap] > temp) {
nums[j] = nums[j - gap];
j -= gap;
}
nums[j] = temp;
}
gap /= 2;
}
}
五. 快速排序
快速排序是一种高效的排序算法,其思想是通过分治法来实现排序,将数组分成两个部分,一部分小于基准值,一部分大于基准值,然后递归处理这两部分,最终完成排序。
Java代码实现:
public static void quickSort(int[] nums, int left, int right) {
if (left >= right) {
return;
}
int i = left;
int j = right;
int pivot = nums[left + (right - left) / 2];
while (i <= j) {
while (nums[i] < pivot) {
i++;
}
while (nums[j] > pivot) {
j--;
}
if (i <= j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
i++;
j--;
}
}
quickSort(nums, left, j);
quickSort(nums, i, right);
}
六. 归并排序
归并排序是一种经典的排序算法,其思想是将数组分成两个部分,分别排序后再合并,以此达到排序的目的。
Java代码实现:
public static void mergeSort(int[] nums, int left, int right) {
if (left >= right) {
return;
}
int mid = left + (right - left) / 2;
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
int[] temp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (nums[i] < nums[j]) {
temp[k++] = nums[i++];
} else {
temp[k++] = nums[j++];
}
}
while (i <= mid) {
temp[k++] = nums[i++];
}
while (j <= right) {
temp[k++] = nums[j++];
}
for (k = 0, i = left; i <= right; i++, k++) {
nums[i] = temp[k];
}
}
总结
以上就是常见的几种经典排序算法的Java实现。每种算法都有其独特的优点和适用场景,需要结合实际情况进行选择。同时,Java提供了丰富的API库,也可以通过自定义比较器等工具类来实现排序算法。
