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.插入排序
插入排序(