快速排序算法的算法介绍

作者&投稿:始全 (若有异议请与网页底部的电邮联系)
【快速排序算法流程图】!!!急~


快速排序(Quicksort)是对冒泡排序的一种改进。

然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

快速排序算法通过多次比较和交换来实现排序,其排序流程如下:
(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。




八大经典排序算法原理及实现
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。快速排序在应该是大家经常看到、听到的算法,但是真正默写出来是有难度的。希望大家看了下面 挖坑填数 方法后,能快速写出、快速排序。其原理就这么几句话,但是现实起来并不是这么简单,...

几种排序算法的比较
一、八大排序算法的总体比较 二、算法各自的特点(具体实现见后面博客)1.快排 (1)算法思想 选择一个基准元素,将比基准元素小的元素放在其前面,比基准元素大的元素放在其后面,然后在将小于基准值元素的子数列和大于基准元素的子数列按原来的方法排序,直到整个序列有序;(2)优缺点 优点:极快数据...

常见排序算法以及对应的时间复杂度和空间复杂度
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 如何将两个有序序列合并?(升序) {a[0]...a[i-1]},{b[0]...b[j-1]} 若 b[0]

快速排序算法的实验验证 [ 实验目的] 验证快速排序算法。(C++)
递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。举例说明一下吧,这个可能不是太好理解。假设要排序的序列为 2 2 4 9 3 6 7 1 5 ...

紧急!!!有什么排序方法?各有什么特点?
4.6 线形排序以上我们讨论的算法均是基于比较的排序算法,在排序算法中有基于数字本身的算法:计数、桶、基数排序。1.计数排序基本思想是对于序列中的每一元素x,确定序列中小于x的元素的个数。例:n个整数序列且每个值在[1,m],排序之。program jspx;const m=6;n=8;var i,j:integer; a,b:array[1..n] of...

X分之3.6等于3分之二节比例?
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。有的算法需要占用临时工作单元数与解决问题的规模n有关。它们随着n的增大而增大,当n较大的时候,将占用较多的存储单元(存储空间)。例如:在快排(快速排序)和归并排序算法就属于这种情况。 在做算法分析的时候,主要讨论的是时间的复杂度。因为从用户的...

常见排序算法归纳
排序算法一般分类:比较两个相邻的元素,将值大的元素交换至右端。依次比较两个相邻的数,将小数放到前面,大数放到后面 即在第一趟:首先比较第1个数和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此一直继续下去,直到比较最后两个数,将小数放前,大数...

常用的数据排序算法有哪些,各有什么特点?举例结合一种排序算法并应用数...
(2) 排序算法的空间复杂度 若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间是O(1),则称之为就地排序(In-PlaceSou)。 非就地排序一般要求的辅助空间为O(n)。(3) 排序算法的时间开销 大多数排序算法的时间开销主要是关键字之间的比较和记录的移动。有的排序算法其执行时间不仅依赖于问题的规模,还...

快速排序算法是基于哪个算法的一种排序算法
分治算法(二分法) 他先把数据二分 然后排序两个区间 然后合并 在二分

...待排序列分别进行堆排序、快速排序和冒泡排序,最省时间的算法...
对同一个基本有序的待排序列分别进行堆排序、快速排序和冒泡排序,最省时间的算法是冒泡排序。冒泡排序的最好比较次数为n次,最差比较次数为n^2次,最差比较次数为0次,最差比较次数为n^2次,最差比较次数为1次,最差比较次数为1次。快速排序的最好比较次数为nlogn次,最差比较次数为n^2次...

舟曲县15167007156: C语言的快速排序的算法是什么啊? -
宁聪氟罗: 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数...

舟曲县15167007156: 谁能介绍一下快速排序的算法思想. -
宁聪氟罗: 快速排序是对起泡排序的一种改进,它的基本思想是:通过一趟排序将待排记录分割成独立的2部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分的记录继续进行排序,以达到整个序列有序.快速排序的平均时间是k*N*lnN,N为待排序列中记录的个数,k为某个常数.在所有同数量级(N*logN)的排序方法中,它被认为是平均性能最好的,但当序列按关键字基本有序时,将退化成冒泡排序,时间复杂度为 O(n^2)

舟曲县15167007156: 快速排序算法原理与实现 -
宁聪氟罗: 快速排序的基本原理就是每一次把一个值放到它应该的位置上,然后序列被分为两部分,这个数前一部分后一部分,再对这两部分分别进行快速排序即可. 如此递归下去,但是对于基本有序的数列,你就不要快排了,那样效率会很低. 扩展...

舟曲县15167007156: 简单介绍一下快速排序的思想? -
宁聪氟罗: 基本思想 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这...

舟曲县15167007156: 快排算法是怎样排序的呢 -
宁聪氟罗: 快排的一趟称为一次划分,原因是一趟排序后,数组以基准元素X为界,左边的元素都小于等于X,右边的元素都大于等于X.要做到这点:先刨去21,再设俩指针,一个指向最左边,一个指向最右边.左边指针的往右走,找一个大于等于21的元素,右边的指针往左走,找一个小于等于21的元素,然后俩指针的值交换.继续循环上面的过程.直到俩指针相遇或擦肩而过.把21交换到俩指针相遇的地方就可以了.第一次交换25和9,然后俩指针相遇,把21和界限处的17交换,得到:结果:17 9 5 21 25 23 30

舟曲县15167007156: 快速排序算法指的是什么?
宁聪氟罗: Introsort就是这样的一种算法,它开始采用快速排序算法进行排序,当递归达到一定深度时就改为堆排序来处理

舟曲县15167007156: 快速排序算法是基于什么算法的排序算法 -
宁聪氟罗: 快速排序是基于一种叫做“二分”的思想

舟曲县15167007156: 快速排序方法的简单解释 -
宁聪氟罗: 快速排序的原理和实现(纯白话文口述)看看这个博客,讲的很透彻,通俗易懂,望对你有用

舟曲县15167007156: 谁能介绍一下快速排序的算法思想.
宁聪氟罗: int a[5]={123,543,75,434,23};int i,j,k,tmp;/*排序效率主要是减少交换次数*/for(i=0;i<4;i++){k=i;for(j=i+1;j<5;j++)if(a[j]<a[k]) k=j;if(i!=k){tmp=a[i];a[i]=a[k];a[k]=tmp;}}

舟曲县15167007156: 哪位帮我讲讲java中的快速排序法 -
宁聪氟罗: 快速排序是对冒泡排序的一种改进.它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网