ChatGPT
本文中部分内容由ChatGPT提供
首先让我们隆重介绍本篇文章的主角ChatGPT,ta为本文的形成提供了极大的帮助。甚至本来是打算以ChatGPT为主,快排是后来加的
既然是介绍,那么就让ChatGPT做个自我介绍吧。(由于图片的预览效果似乎不是很好,以下均由引用符指代ChatGPT)
你好,我是 Assistant,是一个由 OpenAI 训练的大型语言模型。我的知识截止日期是 2021 年,并且我无法浏览互联网。我被设计用来回答各种问题,帮助人们解决问题并学习新知识。我可以回答许多不同类型的问题,包括历史、科学、数学、技术等。请随意提出问题,我将尽力回答。
(具体内容详见OpenAI)
快速排序
先简单介绍一下快排
快速排序是一种分治算法,通常用于对数组进行排序。它的基本思想是:
1. 从数列中选择一个元素(通常是第一个元素或最后一个元素)作为基准(pivot)。
2. 将数列中的元素进行分组,小于基准的元素放在基准的左边,大于基准的元素放在基准的右边。
3. 对基准左右两侧的子序列递归执行步骤1和2,直到所有的子序列都有序为止。
快速排序的时间复杂度为 O(nlogn),是一种高效的排序算法。但是,当数列已经有序时,它的时间复杂度会退化为 O(n^2),因此需要使用随机化算法或者取中位数作为基准来避免这种情况的发生。
再附上一段由ChatGPT提供的java代码
AI都会写注释,我已经可以被优化掉了
import java.util.Arrays;
public class QuickSort {
public static void quickSort(int[] array, int start, int end) {
if (start < end) { // 基线条件:为空或只包含一个元素的数列是有序的
int pivotIndex = partition(array, start, end); // 将数列分为两部分
quickSort(array, start, pivotIndex - 1); // 递归调用
quickSort(array, pivotIndex + 1, end); // 递归调用
}
}
public static int partition(int[] array, int start, int end) {
int pivot = array[end]; // 选择最后一个元素作为基准
int i = start - 1; // i 指向小于基准的最后一个元素
for (int j = start; j < end; j++) {
if (array[j] <= pivot) { // 如果当前元素小于等于基准,则将它和小于基准的最后一个元素交换
i++;
swap(array, i, j);
}
}
swap(array, i + 1, end); // 将基准放到合适的位置
return i + 1; // 返回基准的索引
}
public static void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
public static void main(String[] args) {
int[] array = {3, 1, 4, 1, 5, 9, 2, 6, 5};
quickSort(array, 0, array.length - 1);
System.out.println(Arrays.toString(array)); // 输出 [1, 1, 2, 3, 4, 5, 5, 6, 9]
}
}
(ps:事实再次证明了随手保存的重要性,不然就会像某个憨憨一样不小心点到自己刚写链接然后一夜回到解放前)