Java排序算法是计算机科学中一个重要的研究方向,它是指在一定的规则下对数据进行排序的算法。Java排序算法可以分为内部排序和外部排序,其中,内部排序是指将所有要排序的数据都存放在内存中,而外部排序是指将要排序的数据存放在外存中,并且要求内存中只能存放一定数量的数据。Java语言中常用的排序算法有冒泡排序、快速排序、选择排序、插入排序、归并排序、希尔排序等。
1.冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
public void bubbleSort(int[] arr) { int temp; 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; } } } }
2.快速排序
快速排序(Quick Sort)是对冒泡排序的一种改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比一部分的所有数据都要小,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
public void quickSort(int[] arr, int low, int high) { if (arr == null || arr.length == 0) return; if (low >= high) return; // 找寻基准数据的正确索引 int index = partition(arr, low, high); // 进行迭代对index之前和之后的数组进行相同的操作使整个数组变成有序 quickSort(arr, low, index - 1); quickSort(arr, index + 1, high); } public int partition(int[] arr, int low, int high) { // 指定左指针i和右指针j int i = low; int j = high; // 将第一个数作为基准数 int x = arr[low]; // 循环找比基准数大的数和比基准数小的数 while (i < j) { while (arr[j] >= x && i < j) { j--; } // 将比基准数小的数放在前面 if (i < j) { arr[i] = arr[j]; i++; } while (arr[i] < x && i < j) { i++; } // 将比基准数大的数放在后面 if (i < j) { arr[j] = arr[i]; j--; } } // 将基准数放到中间的位置 arr[i] = x; return i; }
3.选择排序
选择排序(Selection Sort)是一种简单直观的排序算法,它的工作原理如下:在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
public void selectionSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } }
4.插入排序
插入排序(