21xrx.com
2024-05-20 12:30:19 Monday
登录
文章检索 我的文章 写文章
Java常见的排序算法:归并排序、快速排序、插入排序和冒泡排序
2023-06-12 05:06:39 深夜i     --     --
Java 排序算法 归并排序 快速排序 插入排序 冒泡排序

Java常见的排序算法:归并排序、快速排序、插入排序和冒泡排序

排序算法是计算机科学中一个重要的概念。在现代计算机应用中,排序算法的特殊重要性源于它们是用来对数据进行排序的最基本解决方案之一。在Java中,有多种排序算法可供选择。在本文中,我们将介绍Java常见的四种排序算法。

1. 归并排序

归并排序是一种分治算法,它将输入数组拆分为较小的数组,然后对这些较小的数组进行排序,最后合并这些数组以产生排序的输出。以下是Java中实现归并排序的示例代码:


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

  if (left < right) {

    // 中间索引

    int mid = (left + right) / 2;

    // 对左边数组进行递归

    mergeSort(arr, left, mid);

    // 对右边数组进行递归

    mergeSort(arr, mid + 1, right);

    // 合并

    merge(arr, left, mid, right);

  }

}

public void merge(int[] arr, int left, int mid, int right) {

  int[] temp = new int[right - left + 1];

  int i = left;

  int j = mid + 1;

  int k = 0;

  // 依次比较left到mid和mid+1到right区间内的元素,比较并放入临时数组中

  while (i <= mid && j <= right) {

    if (arr[i] < arr[j]) {

      temp[k] = arr[i];

      i++;

    } else {

      temp[k] = arr[j];

      j++;

    }

    k++;

  }

  // 将剩余的元素放入临时数组中

  while (i <= mid) {

    temp[k] = arr[i];

    i++;

    k++;

  }

  while (j <= right) {

    temp[k] = arr[j];

    j++;

    k++;

  }

  // 临时数组中的元素拷贝回原数组中

  for (int m = 0; m < temp.length; m++) {

    arr[left + m] = temp[m];

  }

}

2. 快速排序

快速排序是一种基于比较的排序算法。它的基本思想是选择一个元素作为枢轴,然后将比该元素小的元素放在左侧,比该元素大的元素放在右侧。递归地将左右两个子序列进行同样的操作。以下是Java中实现快速排序的示例代码:


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

  if (left < right) {

    // 确定枢轴位置

    int pivotIndex = partition(arr, left, right);

    // 对枢轴左边的元素进行排序

    quickSort(arr, left, pivotIndex - 1);

    // 对枢轴右边的元素进行排序

    quickSort(arr, pivotIndex + 1, right);

  }

}

public int partition(int[] arr, int left, int right) {

  // 枢轴取中间元素

  int pivot = arr[(left + right) / 2];

  // 左右指针

  int i = left;

  int j = right;

  while (i <= j) {

    // 从左侧找到比枢轴大的元素

    while (arr[i] < pivot) {

      i++;

    }

    // 从右侧找到比枢轴小的元素

    while (arr[j] > pivot)

      j--;

    

    // 如果i<=j,说明未完成排序,则交换元素

    if (i <= j) {

      int temp = arr[i];

      arr[i] = arr[j];

      arr[j] = temp;

      i++;

      j--;

    }

  }

  // 返回枢轴位置

  return i;

}

3. 插入排序

插入排序的基本思想是构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。以下是Java中实现插入排序的示例代码:


public void insertionSort(int[] arr) {

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

    int tmp = arr[i];

    int j = i - 1;

    while (j >= 0 && arr[j] > tmp) {

      arr[j + 1] = arr[j];

      j--;

    }

    arr[j + 1] = tmp;

  }

}

4. 冒泡排序

冒泡排序是一种比较简单的排序算法,在该算法中,重复地遍历待排序数组,比较相邻的两个元素,如果它们的顺序不对,则交换它们。以下是Java中实现冒泡排序的示例代码:


public void bubbleSort(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 temp = arr[j];

        arr[j] = arr[j + 1];

        arr[j + 1] = temp;

      }

    }

  }

}

综上,我们介绍了Java中常见的四种排序算法。归并排序和快速排序都是基于分治的排序算法,插入排序和冒泡排序则是基于比较的排序算法,它们对于不同的排序任务都有着不同的优劣。在实际应用中,我们应该根据不同场景的需求选择适合的排序算法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复