🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
排序算法是一种将一组数据按照特定的规则进行排列的方法。排序算法通常用于对数据的处理,使得数据能够更容易地被查找、比较和分析。
下面是常见的11种排序算法:
快速排序是一种分治算法,基本思想如下:
快速排序的实现可以使用多种方式选择基准元素和划分子数组,例如随机选择基准元素、三数取中法等。
快速排序的平均时间复杂度为O(nlogn),最坏情况下的时间复杂度为O(n^2)。
在最优情况下,每次划分都能将数组分成长度大致相等的两部分,时间复杂度为O(nlogn)。
在最坏情况下,每次划分得到的两部分长度分别为n-1和0,这种情况下会导致快速排序变成一种类似于选择排序的算法,时间复杂度为O(n^2)。
但是,快速排序的平均时间复杂度为O(nlogn),这是因为平均情况下每次划分能够将数组分成长度相近的两部分,而且每个元素最多被划分logn次,因此时间复杂度为O(nlogn)。
快速排序的时间复杂度与划分的方式有关,最优情况下时间复杂度最低,最坏情况下时间复杂度最高。
快速排序是一种高效的排序算法,其应用场景如下:
快速排序广泛应用于各个领域,可以快速地对大量数据进行排序,并提高应用程序的性能和响应速度。
/// <summary>
/// 快速排序:是一种用空间换时间的排序方法,时间复杂度最优O(n),最坏O(n^2),交换次数少速度比冒泡排序快
/// </summary>
public class Program {
public static void Main(string[] args) {
int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };
QuickSort(array, 0, array.Length - 1);
ShowArray(array);
Console.ReadKey();
}
private static void ShowArray(int[] array) {
foreach (var num in array) {
Console.Write($"{num} ");
}
Console.WriteLine();
}
public static void QuickSort(int[] array, int left, int right) {
if (left < right) {
int i = left, j = right;
int pivot = array[i];
while (i < j) {
while (i < j && array[j] >= pivot) { j--; }
array[i] = array[j];
while (i < j && array[i] <= pivot) { i++; }
array[j] = array[i];
}
array[i] = pivot;
QuickSort(array, left, i - 1);
QuickSort(array, i + 1, right);
}
}
}