快速排序是一种经典的分治算法,其核心思想在于通过选定一个基准元素,将数组划分为两部分,使得左侧部分的所有元素均小于该基准元素,右侧部分的所有元素均大于该基准元素,随后递归地对左右两部分分别进行排序。
以下是分别使用 Python、Java 和 JavaScript 实现的快速排序算法代码:
Python 实现
def quick_sort(arr):
# 如果数组长度小于等于 1,直接返回数组
if len(arr) <= 1:
return arr
else:
# 选择数组的第一个元素作为基准元素
pivot = arr[0]
left = []
right = []
# 遍历数组中除基准元素外的其他元素
for i in range(1, len(arr)):
if arr[i] <= pivot:
left.append(arr[i])
else:
right.append(arr[i])
# 递归地对左右两部分进行排序,并合并结果
return quick_sort(left) + [pivot] + quick_sort(right)
# 测试代码
arr = [3, 6, 8, 10, 1, 2, 1]
sorted_arr = quick_sort(arr)
print(sorted_arr)
Java 实现
import java.util.Arrays;
public class QuickSort {
快速排序的主函数
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
// 获取基准元素的位置
int pivotIndex = partition(arr, low, high);
// 递归地对基准元素左侧部分进行排序
quickSort(arr, low, pivotIndex - 1);
// 递归地对基准元素右侧部分进行排序
quickSort(arr, pivotIndex + 1, high);
}
}
// 分区函数,用于确定基准元素的位置
private static int(int[] arr, int low, int high) {
// 选择数组的最后一个元素作为基准元素
int pivot = arr[high];
int i = low - 1;
// 遍历数组
for (int j = low; j < high; j++) {
if (arr[j] <= pivot) {
i++;
// 交换元素位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将基准元素放到正确的位置
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
public static void main(String[] args) {
int[] arr = {3, 6, 8, 10, 1, 2, 1};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
}
JavaScript 实现
function quickSort(arr) {
// 如果数组长度小于等于 1,直接返回数组
if (arr.length <= 1) {
return arr;
}
// 选择数组的第一个元素作为基准元素
const pivot = arr[0];
const left = [];
const right = [];
// 遍历数组中除基准元素外的其他元素
for (let i = 1; i < arr.length; i++) {
if (arr[i] <= pivot) {
left.push(arr[i]);
} else {
right(arr[i]);
}
}
// 递归地对左右两部分进行排序,并合并结果
return [...quickSort(left), pivot, ...quickSort(right)];
}
// 测试代码
const arr = [3, 6, 8, 10, 1, 2, 1];
const sortedArr = quickSort(arr);
console.log(sortedArr);
以上代码分别用 Python、Java 和 JavaScript 实现了快速排序算法,你可以根据自己的需求选择合适的代码。