Java实现排序算法:快速排序函数
发布时间:2023-06-03 03:39:03
快速排序是一种高效的排序算法,它使用分治策略对数据进行排序。它的基本思想是将待排序的数据分成两个部分,一部分是小于基准元素的数据,一部分是大于基准元素的数据,然后分别对这两部分进行排序,最终将它们合并起来得到有序序列。
快速排序算法的步骤如下:
1. 选择基准元素:从待排序数据中选一个元素作为基准元素,可以随机选取,也可以从数据的左端或右端选择。
2. 分区过程:将待排序数据根据基准元素大小分成两个区间,一部分为小于基准的,另一部分为大于基准的。
3. 递归过程:对分区后的数据按照同样的方式进行排序,直到区间中只有一个元素时排序完成。
4. 合并过程:将排序好的左右两个区间合并起来,得到最终的有序序列。
下面是快速排序的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[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;
}
运行上述代码即可实现快速排序。
快速排序的时间复杂度为O(nlogn),实际上它的实际时间复杂度是O(nlogn)到O(n^2)之间的,这取决于基准元素的选择和分区过程中两个区间的大小比例。在 的情况下,即每次分区后两个子区间的大小相等时,时间复杂度为O(nlogn),在最坏的情况下,即每次分区后只得到一个元素和n-1个元素的子区间时,时间复杂度为O(n^2)。
