常见排序算法的Java实现代码汇总

来源:互联网 发布:商品标题搜索优化 编辑:程序博客网 时间:2024/05/02 01:27

常见排序算法原理与实现


1.冒泡排序

基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

Java实现:
import java.util.Arrays;public class BubbleSort {  public static void bubbleSort(int[] arr) {    int temp = 0;    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]) {          temp = arr[j];          arr[j] = arr[j + 1];          arr[j + 1] = temp;        }      }    }  }  public static void main(String[] args) {    int[] arr={1,3,5,3,2,6,9,5,8};    bubbleSort(arr);    System.out.println(Arrays.toString(arr));  }}


2.快速排序

基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

Java实现:
 public static void quickSort(int[] arr) {    qsort(arr, 0, arr.length - 1);  }  private static void qsort(int[] arr, int low, int high) {    if (low < high) {      int pivot = partition(arr, low, high); // 将数组分为两部分      qsort(arr, low, pivot - 1); // 递归排序左子数组      qsort(arr, pivot + 1, high); // 递归排序右子数组    }  }  private static int partition(int[] arr, int low, int high) {    int pivot = arr[low]; // 枢轴记录    while (low < high) {      while (low < high && arr[high] >= pivot){        high--;      }              arr[low] = arr[high]; // 交换比枢轴小的记录到左端            while (low < high && arr[low] <= pivot){        low++;      }              arr[high] = arr[low]; // 交换比枢轴大的记录到右端    }    // 扫描完成,枢轴到尾    arr[low] = pivot;        // 返回的是枢轴的位置    return low;  }

3.选择排序

基本原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

Java实现:
private static void selectionSort(int[] array) {    // 每次循环找出相对最小值,并交换到头部    for (int i = 0; i < array.length - 1; i++) {      int min = i;      for (int j = i+1; j < array.length; j++) {        if (array[j] < array[min])          min = j;      }      int temp = array[min];      array[min] = array[i];      array[i] = temp;    }  }

4.插入排序

基本步骤:

1. 从第一个元素开始,该元素可以认为已经被排序

2. 取出下一个元素,在已经排序的元素序列中从后向前扫描

3. 如果该元素(已排序)大于新元素,将该元素移到下一位置

4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

5. 将新元素插入到该位置后

6. 重复步骤 2 ~ 5


Java实现:
<pre name="code" class="java">// 插入排序  private static void insertSort(int[] arr) {    int key = 0, j = 0;    for (int i = 1; i < arr.length; i++) { // 默认第一个元素(下标从0开始)已经有序      key = arr[i]; // 待排序元素      j = i - 1;      while (j >= 0 && arr[j] > key) { // 待排序数较小        arr[j + 1] = arr[j]; // 后移        j--;      }      arr[j + 1] = key; // 插入待排序元素    }  }











0 0
原创粉丝点击