快排算法的特点
实用性强。
很多实际的项目中使用了快排算法。但通常对算法都进行了调整(tuning),比如Java.util.Arrays类中的sort函数就使用了快排算法,但使用了双参考值(Dual-Pivot Quicksort)等一些改进措施。由于快排算法为递归算法,可以用循环代替递归函数调用,改进性能。
可以将数组中的数据直接交换位置实现排序,所以理论上不需要额外的空间。
时间复杂度
平均情况:O(nlgn)
最坏情况:O(n*n),发生在当数据已经是排序状态时
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)
算法步骤:
1 从数列中挑出一个元素,称为 “基准”(pivot),
2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
(图片从网上下载的,图中的基元选择的是最后一个元素,代码实现选第一个元素)
public class QuickSort { public static void main(String[] args) { int arr[] = { 10, 1, 56, 45, 2, 9, 33, 10 }; quickSort(arr, 0, arr.length - 1); for (int a : arr) { System.out.println(a); } } private static void quickSort(int[] array, int start, int end) { if (start > end) { return; } // 初始化保存基元,i,j int key = array[start]; int i = start, j; for (j = start + 1; j <= end; j++) { // 如果此处元素小于基元,则把此元素和i+1处元素交换,并将i加1,如大于或等于基元则继续循环 if (array[j] < key) { int temp = array[j]; array[j] = array[i + 1]; array[i + 1] = temp; i++; } } // 交换i处元素和基元 array[start] = array[i]; array[i] = key; // 递归调用 quickSort(array, start, i - 1); quickSort(array, i + 1, end); } }
相关推荐
C语言算法--快速排序法
快速排序算法详解 快速排序(Quick Sort)是一种分治思想的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续...
快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的...
经典排序算法 - 快速排序Quick sort 经典排序算法 - 桶排序Bucket sort 经典排序算法 - 插入排序Insertion sort 经典排序算法 - 基数排序Radix sort 经典排序算法 - 鸽巢排序Pigeonhole sort 经典排序算法 - ...
数据结构与算法 - 快速排序算法实现报告 在数据结构与算法的学习过程中,快速排序算法是一种重要的排序算法,它具有排序速度快、就地排序的优点,但也具有不稳定性。以下是快速排序算法的详细实现报告。 快速排序...
本实验旨在通过对两种经典排序算法——快速排序和归并排序的研究与实现,深入理解它们的基本原理、时间复杂度,并通过编程实践比较这两种算法在不同数据规模下的性能表现。 #### 二、快速排序 **1. 基本思想** ...
算法设计,快速排序的C++实现代码,并测试运行时间
在给出的"Lab 1"文件中,可能包含了实现快速排序的代码,包括普通快速排序和随机快速排序的版本,以及统计两种排序算法运行时间的代码。通过分析和运行这些代码,你可以更深入地理解快速排序的工作原理和性能特性。
快速排序算法设计与分析 快速排序(Quicksort)是一种高效的排序算法,由美国计算机科学家Tony Hoare在1960年发明。该算法的时间复杂度平均为O(n log n),在实际应用中非常常用。 一、快速排序算法的基本思想 ...
在本文中,我们将深入探讨基于FPGA的并行快速排序算法,特别关注“位宽可设”的特性。这种算法能够高效地处理大量数据,并且在硬件实现上具有很高的灵活性。我们将从以下几个方面来阐述这个主题: 一、快速排序算法...
本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析它们的算法原理、时间效率,并通过经验分析验证理论分析的准确性。 **1. 选择排序(Selection Sort)** 选择排序...
本文将对快速排序、归并排序、堆排序等常见排序算法进行比较和分析,探讨它们的优缺点和适用场景。 首先, let's 看一下这些排序算法的时间复杂度和空间复杂度: | 排序算法 | 平均情况 | 最好情况 | 最坏情况 | ...
最坏情况是逆序数组,需要进行n*(n-1)/2次比较和交换,时间复杂度为O(n^2)。 交换排序,也称为选择排序,它的基本思想是从未排序的序列中选取最小(或最大)的元素,放置到已排序序列的末尾,然后再从剩余未排序的...
快速排序算法是一种高效的排序算法,它的工作原理是通过选择一个元素作为pivot,然后将数组分为两个部分,以达到排序的目的。快速排序算法的时间复杂度为O(n log n),因此它适合大规模的数据排序。 5.归并排序算法 ...
本主题将详细探讨四种常见的排序算法:选择排序、插入排序、快速排序以及冒泡排序,它们都是用C语言实现的。以下是这些排序算法的详细解析: 1. **选择排序(Selection Sort)** - 选择排序是一种简单直观的排序...
算法设计与分析>>课程的实验程序,可以直接使用也可以修改后使用
算法设计及分析实验报告---快速排序.doc
本主题将深入探讨四种常见的排序算法:归并排序、快速排序以及与链表相关的排序方法。 首先,我们来讨论归并排序(Merge Sort)。这是一种基于分治策略的排序算法。归并排序将大问题分解为小问题,然后逐步合并这些...