欢迎访问宙启技术站
智能推送

Java函数:排序数组

发布时间:2023-06-25 15:46:30

在Java中,有许多方法和工具可用于对数组排序。以排序数字数组为例,Java提供了多种排序算法来满足不同的需要。本文将介绍Java中的排序算法以及如何使用它们来对数字数组进行排序。

一、原始数组的初始化及赋值

在对数组进行排序之前,需要先初始化和赋值。下面是一个初始化并赋值的代码片段:

int[] nums = new int[10]; // 初始化一个长度为10的整数数组

for (int i = 0; i < nums.length; i++) {

  nums[i] = (int) (Math.random() * 100); // 随机生成0到100的整数

}

二、Java中的排序算法

1. 冒泡排序

冒泡排序算法的基本思想是每次将相邻的两个元素进行比较,如果当前元素比后面一个元素大,就交换这两个元素的位置,直到将整个数组都排好序。以下是实现冒泡排序的代码:

public static void bubbleSort(int[] nums) {

  for (int i = 0; i < nums.length - 1; i++) {

    for (int j = 0; j < nums.length - i - 1; j++) {

      if (nums[j] > nums[j + 1]) {

        // 使用临时变量temp交换元素位置

        int temp = nums[j];

        nums[j] = nums[j + 1];

        nums[j + 1] = temp;

      }

    }

  }

}

2. 选择排序

选择排序算法的基本思想是每次找到未排序部分的最小元素,将其放到已排序部分的最后面。简而言之,就是每次选择未排序部分的最小元素,与已排序部分的最后一个元素交换位置。以下是实现选择排序的代码:

public static void selectionSort(int[] nums) {

  for (int i = 0; i < nums.length - 1; i++) {

    int minIndex = i; // 假设当前位置i的元素最小

    for (int j = i + 1; j < nums.length; j++) {

      if (nums[minIndex] > nums[j]) {

        minIndex = j; // 更新minIndex

      }

    }

    if (minIndex != i) {

      // 使用临时变量temp交换元素位置

      int temp = nums[minIndex];

      nums[minIndex] = nums[i];

      nums[i] = temp;

    }

  }

}

3. 插入排序

插入排序算法的基本思想是将未排序的元素插入到已排序部分的合适位置上。实现插入排序的过程,遍历每一个元素,与已排序部分的元素进行比较,找到它所应该的位置进行插入。以下是实现插入排序的代码:

public static void insertionSort(int[] nums) {

  for (int i = 1; i < nums.length; i++) {

    int current = nums[i];

    int j = i - 1;

    while (j >= 0 && nums[j] > current) {

      nums[j + 1] = nums[j]; // 将元素向后移动

      j--;

    }

    nums[j + 1] = current; // 将元素插入到合适的位置

  }

}

4. 快速排序

快速排序算法的基本思想是将一个大问题划分成两个小问题,然后递归地解决这些问题。具体实现是,选择一个元素作为基准,将所有小于基准的元素放在它的左边,所有大于基准的元素放在它的右边,然后分别对左右两个部分递归地进行排序。以下是实现快速排序的代码:

public static void quickSort(int[] nums, int left, int right) {

  if (left < right) {

    int i = left, j = right;

    int pivot = nums[(left + right) / 2]; // 选择中间点为基准

    while (i <= j) {

      while (nums[i] < pivot) i++;

      while (nums[j] > pivot) j--;

      if (i <= j) {

        // 使用临时变量temp交换元素位置

        int temp = nums[i];

        nums[i] = nums[j];

        nums[j] = temp;

        i++;

        j--;

      }

    }

    // 递归排序左部分和右部分

    if (left < j) quickSort(nums, left, j);

    if (i < right) quickSort(nums, i, right);

  }

}

5. 归并排序

归并排序算法的基本思想是将两个已排序的数组归并为一个更大的已排序数组。具体实现方式是将数组划分成两个子数组,递归排序这两个子数组,然后将它们合并为一个已排序的数组。以下是实现归并排序的代码:

public static void mergeSort(int[] nums, int left, int right) {

  if (left < right) {

    int mid = (left + right) / 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 (int p = 0; p < temp.length; p++) {

      nums[left + p] = temp[p];

    }

  }

}

三、使用Java排序算法实现数组排序

现在,我们来编写一个名为sortNumberArray的函数,它可以接受一个整数数组,以及一个排序方法作为参数,实现对数组的排序。以下是sortNumberArray的代码:

public static void sortNumberArray(int[] nums, String method) {

  switch (method) {

    case "bubble":

      bubbleSort(nums);

      break;

    case "selection":

      selectionSort(nums);

      break;

    case "insertion":

      insertionSort(nums);

      break;

    case "quick":

      quickSort(nums, 0, nums.length - 1);

      break;

    case "merge":

      mergeSort(nums, 0, nums.length - 1);

      break;

    default:

      // 默认使用快速排序

      quickSort(nums, 0, nums.length - 1);

      break;

  }

}

四、总结

Java提供了多种排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序等。每种算法都有不同的特点和适用场合。在使用排序算法之前,需要先完成数组的初始化和赋值。使用Java的排序算法非常简单,只需调用对应的函数即可实现排序。在本文中,我们已经介绍了Java中的几种排序算法及它们的实现方式。您可以根据您的需求选择合适的算法。