21xrx.com
2024-12-22 22:46:37 Sunday
登录
文章检索 我的文章 写文章
Java中常用的排序算法及代码实现
2023-06-15 17:51:43 深夜i     --     --
排序算法 Java 冒泡排序 插入排序 选择排序 归并排序 快速排序

文章

Java作为一门流行的编程语言,为开发人员提供了众多的排序算法。本文将介绍Java中常用的排序算法,包括冒泡排序、插入排序、选择排序、归并排序、快速排序等,同时提供这些算法的详细代码实现,方便读者学习和使用。

冒泡排序是最简单的排序算法之一,它的原理是通过比较相邻的元素大小来进行排序。代码如下:


public static void bubbleSort(int[] array){

  int temp;

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

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

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

        temp = array[j];

        array[j] = array[j+1];

        array[j+1] = temp;

      }

    }

  }

}

插入排序是将一个元素插入到已经排好序的一个序列中,代码如下:


public static void insertionSort(int[] array){

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

    int j = i;

    while (j > 0 && array[j] < array[j-1]){

      int temp = array[j];

      array[j] = array[j-1];

      array[j-1] = temp;

      j--;

    }

  }

}

选择排序每次从未排序序列中选择最小的一个元素放到已经排序序列的末尾。代码如下:


public static void selectionSort(int[] array){

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

    int minIndex = i;

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

      if (array[j] < array[minIndex]){

        minIndex = j;

      }

    }

    int temp = array[i];

    array[i] = array[minIndex];

    array[minIndex] = temp;

  }

}

归并排序采用分治策略,将序列不断划分为小的子序列,再对子序列进行排序。代码如下:


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

  if (left < right){

    int mid = (left + right) / 2;

    mergeSort(array, left, mid);

    mergeSort(array, mid+1, right);

    merge(array, left, mid, right);

  }

}

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

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

  int i = left;

  int j = mid + 1;

  int k = 0;

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

    if (array[i] <= array[j]){

      temp[k++] = array[i++];

    } else {

      temp[k++] = array[j++];

    }

  }

  while (i <= mid){

    temp[k++] = array[i++];

  }

  while (j <= right){

    temp[k++] = array[j++];

  }

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

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

  }

}

快速排序也是一种分治算法,通过选择一个基准元素,将序列划分为左右两个子序列,再对子序列进行排序。代码如下:


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

  if (left < right){

    int partitionIndex = partition(array, left, right);

    quickSort(array, left, partitionIndex - 1);

    quickSort(array, partitionIndex + 1, right);

  }

}

public static int partition(int[] array, int left, int right){

  int pivot = left;

  int index = pivot + 1;

  for (int i = index; i <= right; i++){

    if (array[i] < array[pivot]){

      int temp = array[i];

      array[i] = array[index];

      array[index] = temp;

      index++;

    }

  }

  int temp = array[pivot];

  array[pivot] = array[index - 1];

  array[index - 1] = temp;

  return index - 1;

}

本文介绍的这些排序算法在实际开发中都有广泛的应用,读者可以根据自己的需求选择最适合自己的算法。

  
  

评论区

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