快速排序--图示

时间: 2024-08-06 15:33:54

快速排序--图示的相关文章

快速排序算法-C语言实现

注:本篇内容为翻译,之所以选择这篇进行翻译原因是该文章含有动画,能够更加直观地展示快速排序.同时,可以仔细看一下代码,代码中把结构化的思想给予了更加充分地表现.按照功能进行模块划分的思想得到了彻底地贯彻. 以下内容翻译自: http://cprogramminglanguage.net/quicksort-algorithm-c-source-code.aspx 译文: 在快速排序算法中,使用了分治策略.首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束. 步骤如下: 在序列

C/C++ 快速排序 quickSort

下面的动画展示了快速排序算法的工作原理. 快速排序图示:可以图中在每次的比较选取的key元素为序列最后的元素. #include <stdio.h> #include <stdlib.h> void swap(int * x, int * y) { int tmp = *x; *x = *y; *y = tmp; } void printlist(int list[],int n) { int i; for(i=0;i<n;i++) printf("%d\t&quo

Java数据结构和算法(九)——高级排序

春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的.接着我们在讲解递归 的时候,介绍了归并排序,归并排序需要O(NlogN),这比简单排序要快了很多,但是归并排序有个缺点,它需要的空间是原始数组空间的两倍,当我们需要排序的数据占据了整个内存的一半以上的空间,那么是不能使用归并排序的. 本篇博客将

算法集锦(四)

归并排序算法实现: #include<stdio.h> #include<stdlib.h> #define FatalError( Str ) fprintf( stderr, "%s\n", Str ), exit( 1 ) typedef int ElementType; void Merge(ElementType A[],ElementType TmpArray[],int lpos,int rpos,int rightend) { int i,lef

十大基础实用算法之快速排序和堆排序

快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1 从数列中挑出一个元素,称为 "基准"(pi

三路快速排序算法

1.三路快速排序算法的基本思想 之前的快速排序算法都是将序列分成<=v和>v或者是<v和>=v的两个部分,而三路快速排序是将序列分成三个部分: <v.=v.>v,如下图所示: 首先v元素还是作为"基准"元素,e表示当前遍历索引值指向的元素,也就是待考虑的元素,从图中可以看出来,整个序列被分成 3个部分,也就是说当我们遍历完成之后整个序列就已经被分成了<v.=v.>v三个部分了,而我们只需要对<v和>v的两个部分 再次递归调用三

#排序算法#【4】快速排序

快速排序法是对冒泡排序的一种改进,本来是要和冒泡排序写在一个文章里的,不过前两天刚开始在递归调用的时候没有完全理解,昨天晚上google了一把发现原来自己理解错了,我看的这个教材没有写清楚,今天早上调试了一把终于成功. 快速排序算法的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 快速排序使用分治策略来把待排序数据序列分为两个子序列

【算法】5 快速排序

(由于markdown的草稿箱十分"危险"所以就不存在草稿箱了,直接将这篇没有完成的博客发表出来了,今天晚些时候和明天会继续修改) 快速排序Quicksort由Tony Hoare在1962年发明. 这是一个分治算法,而且它就在原地排序. 所谓原地排序,就是指在原来的数据区域内进行重排,就像插入排序一般.而归并排序就不一样,它需要额外的空间来进行归并排序操作.为了在线性时间与空间内归并,它不能在线性时间内实现就地排序,原地排序对它来说并不足够.而快速排序的优点就在于它是原地的,也就是说

快速排序和三向快速排序

快速排序 快速排序是一种分治的排序算法.它将一个数组分成两个子数组,将两部分独立的排序.快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序:而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了.在归并排序中,递归调用发生在处理整个数组之前,而快速排序中,递归调用发生在处理整个数组之后. 快速排序算法是最快的通用排序算法,大部分情况下,可以直接选择快速排序 如上图所示,将第一个元素K作为切分元素,使得左边的元素均不大于K,右边