21xrx.com
2024-12-22 22:45:11 Sunday
登录
文章检索 我的文章 写文章
Java排序算法代码实例
2023-06-15 19:39:53 深夜i     --     --
Java 排序算法 代码实例

Java编程语言是一种非常流行的面向对象编程语言,拥有许多非常强大和灵活的排序算法。本文将讨论几种常见的Java排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序。

冒泡排序

冒泡排序是一种相对简单的排序算法,其基本思路是反复交换相邻元素,将较大的元素排在数组的尾部。以下是一个Java冒泡排序的实例代码:


public static void bubbleSort(int[] arr) {

  int n = arr.length;

  for (int i = 0; i < n-1; i++) {

    for (int j = 0; j < n-i-1; j++) {

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

        int temp = arr[j];

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

        arr[j+1] = temp;

      }

    }

  }

}

选择排序

选择排序是一种简单但有效的排序算法,其基本思路是选择数组中最小的元素并将其放在第一个位置,然后选择第二小的元素并将其放在第二个位置,以此类推。以下是一个Java选择排序的实例代码:


public static void selectionSort(int[] arr) {

  int n = arr.length;

  for (int i = 0; i < n-1; i++) {

    int minIndex = i;

    for (int j = i+1; j < n; j++) {

      if (arr[j] < arr[minIndex])

        minIndex = j;

      

    }

    int temp = arr[minIndex];

    arr[minIndex] = arr[i];

    arr[i] = temp;

  }

}

插入排序

插入排序是一种简单但有效的排序算法,其基本思路是将无序的元素插入到已排序的元素中,以便得到一个有序的数组。以下是一个Java插入排序的实例代码:


public static void insertionSort(int[] arr) {

  int n = arr.length;

  for (int i = 1; i < n; i++) {

    int key = arr[i];

    int j = i - 1;

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

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

      j--;

    }

    arr[j+1] = key;

  }

}

希尔排序

希尔排序是一种相对复杂但效率较高的排序算法,其基本思路是将数组分成若干个小的子数组,通过插入排序来对每个子数组进行排序,最后将整个数组排序。以下是一个Java希尔排序的实例代码:


public static void shellSort(int[] arr) {

  int n = arr.length;

  for (int gap = n/2; gap > 0; gap /= 2) {

    for (int i = gap; i < n; i++) {

      int temp = arr[i];

      int j;

      for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {

        arr[j] = arr[j - gap];

      }

      arr[j] = temp;

    }

  }

}

归并排序

归并排序是一种基于分治法的排序算法,其基本思路是将数组分成若干个小的子数组,递归地对每个子数组进行排序,然后按顺序合并这些子数组,最终得到整个数组排序。以下是一个Java归并排序的实例代码:


public static void mergeSort(int[] arr, int l, int r) {

  if (l < r) {

    int m = l + (r-l)/2;

    mergeSort(arr, l, m);

    mergeSort(arr, m+1, r);

    merge(arr, l, m, r);

  }

}

public static void merge(int[] arr, int l, int m, int r) {

  int n1 = m - l + 1;

  int n2 = r - m;

  int[] L = new int[n1];

  int[] R = new int[n2];

  for (int i = 0; i < n1; i++) {

    L[i] = arr[l + i];

  }

  for (int j = 0; j < n2; j++) {

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

  }

  int i = 0, j = 0, k = l;

  while (i < n1 && j < n2) {

    if (L[i] <= R[j]) {

      arr[k] = L[i];

      i++;

    } else {

      arr[k] = R[j];

      j++;

    }

    k++;

  }

  while (i < n1) {

    arr[k] = L[i];

    i++;

    k++;

  }

  while (j < n2) {

    arr[k] = R[j];

    j++;

    k++;

  }

}

快速排序

快速排序是一种基于分治法的排序算法,其基本思路是选择一个基准值并将数组分成两个部分,使得左部分的每个元素都小于等于基准值,右部分的每个元素都大于等于基准值,然后递归地对左右两部分进行排序。以下是一个Java快速排序的实例代码:


public static void quickSort(int[] arr, int low, int high) {

  if (low < high) {

    int pivot = partition(arr, low, high);

    quickSort(arr, low, pivot-1);

    quickSort(arr, pivot+1, high);

  }

}

public static int partition(int[] arr, int low, int high) {

  int pivot = arr[high];

  int i = low - 1;

  for (int j = low; j < high; j++) {

    if (arr[j] < pivot) {

      i++;

      int temp = arr[i];

      arr[i] = arr[j];

      arr[j] = temp;

    }

  }

  int temp = arr[i+1];

  arr[i+1] = arr[high];

  arr[high] = temp;

  return i+1;

}

3个

  
  

评论区

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