直接排序属于交换排序
基本思想:
1:选1个基准元素(通常是第一个元素或最后一个元素),将待排数列分成两部分,一部分比基准元素小,一部分比基准元素大
2:再对这两部分数列重复步骤1
时间复杂度:
最好情况:O(n*logn)
最坏情况,退化为冒泡排序 O(n*n)
稳定性:不稳定
python代码实现:quick_sort.py
def swap(l, i, j):
tmp = l[i]
l[i] = l[j]
l[j] = tmp
def partition(l, low, high):
pivo = l[low] #基准元素选取
while(low != high): #从数列两端交替扫描
while(low < high and l[high] >= pivo): #从high位置向前搜索,将比基准元素小的交换到低端
high -= 1
swap(l, low, high)
while(low < high and l[low] <= pivo):#从low位置向后搜索,将比基准元素大的交换到高端
low += 1
swap(l, low, high)
return low
def quick_sort(l, low, high):
if low < high:
pivokey = partition(l, low, high)
quick_sort(l, low, pivokey-1) #递归对低端数列排序
quick_sort(l, pivokey+1, high) #递归对高端数列排序
if __name__ == '__main__':
l = [57,12,63,29,37,18,34,46,92,87]
quick_sort(l, 0, 9)
print('result:' + str(l))
分享到:
相关推荐
数据结构与算法 - 快速排序算法实现报告 在数据结构与算法的学习过程中,快速排序算法是一种重要的排序算法,它具有排序速度快、就地排序的优点,但也具有不稳定性。以下是快速排序算法的详细实现报告。 快速排序...
快速排序算法是一种高效的排序算法,它的工作原理是通过选择一个元素作为pivot,然后将数组分为两个部分,以达到排序的目的。快速排序算法的时间复杂度为O(n log n),因此它适合大规模的数据排序。 5.归并排序算法 ...
在实际应用中,冒泡排序效率较低,时间复杂度为O(n^2),对于大数据量或性能要求高的场景,通常会选择其他更高效的排序算法,如快速排序、归并排序或堆排序等。然而,由于其简单易懂,冒泡排序在教学和理解排序算法...
本篇文章主要探讨了如何在VC++环境中利用多线程技术来实现三种经典的排序算法:冒泡排序、快速排序和归并排序,并对它们的性能进行了比较。 首先,冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次...
快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出。它的基本思想是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别...
本篇文章将详细讨论几种常见的排序算法:选择排序、冒泡排序、插入排序、合并排序以及快速排序,分析它们的算法原理、时间效率,并通过经验分析验证理论分析的准确性。 **1. 选择排序(Selection Sort)** 选择排序...
本文将深入探讨标题和描述中提到的一些基本排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、堆排序、快速排序以及归并排序,并结合C++编程语言进行讲解。 1. **选择排序(Selection Sort)** - 选择排序是一...
在实际应用中,插入排序通常用于小规模数据或者作为其他高级排序算法(如快速排序、归并排序)的基石,特别是在处理部分有序的数据时,它的表现往往优于其他O(n^2)的排序算法。同时,插入排序也可以用于构建更复杂的...
1. 冒泡排序:冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换位置,使最大(或最小)的元素逐渐“浮”到数组的一端。虽然效率较低,但对于小规模数据或部分有序的数据,仍然有其应用价值。 2. 插入排序...
冒泡排序是一种基础且经典的排序算法,它的基本思想是通过不断地交换相邻的逆序元素,使得每一轮排序后,最大的元素“浮”到数组的末尾。这个过程就像水底下的气泡逐渐升至水面一样,因此得名“冒泡排序”。 在Java...
在这个例子中,可能会有一个类`SortAlgorithms`包含各种排序算法的成员函数,如冒泡排序、选择排序、插入排序、快速排序等。另一个类`UserInterface`则负责处理用户交互和控制执行哪种排序算法。 3. **排序算法的...
交换排序:快速排序quicksort,冒泡排序bubblesort 选择排序:直接选择排序selectionsort,堆排序maxheapsort 插入排序:直接插入排序insertsort,希尔排序shellsort 合并排序:归并排序mergesort
快速排序是一种常用的排序算法,它的效率在许多情况下非常高。其核心思想是选择一个"枢轴"(pivot)元素,然后将数组分为两部分:一部分包含小于枢轴的元素,另一部分包含大于枢轴的元素。递归地对这两部分继续执行...
在实际应用中,通常会选择时间复杂度更低的排序算法,如快速排序、归并排序或堆排序,它们在大多数情况下能提供更好的性能。然而,理解这些基础排序算法有助于我们更好地掌握排序的本质,以及如何根据具体需求选择...
在实际应用中,尤其是在处理大量数据时,通常会选用更高效的排序算法,如快速排序、归并排序或堆排序。然而,理解选择排序有助于我们学习和理解其他更复杂的排序算法,因此在学习数据结构和算法时仍然是必不可少的...
本文主要探讨四种基本的排序算法:插入排序、交换排序、选择排序和归并排序,这些都是内部排序的主要方法。 1. **插入排序**: - 直接插入排序是最基础的排序算法之一,它的工作原理类似于人们手动整理扑克牌。...
快速排序(Quick Sort)是一种分治思想的排序算法,它的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后再分别对这两部分记录继续进行排序,以达到...
这六种排序可能包括插入排序、快速排序、归并排序、堆排序、希尔排序以及基数排序等。这些排序算法各有特点,例如: - **插入排序**:将未排序元素依次插入到已排序部分的正确位置,适用于小规模或接近有序的序列。...
本课程设计旨在深入比较几种常见的排序算法,包括直接插入排序、冒泡排序、选择排序和快速排序,通过附带的源代码进行实践操作,以帮助理解它们的工作原理和性能差异。 1. **直接插入排序**:直接插入排序是一种...
快速排序是一种高效的排序算法,由C.A.R. Hoare在1960年提出,它采用了分治(Divide and Conquer)策略。快速排序的基本思想是通过一趟排序将待排序的数据分割成两部分,其中一部分的所有数据都比另一部分的所有数据...