快排算法的深入理解

简述

  给每组数分成小、中、大 三种,利用递归思想进行排序。时间复杂度是n*log2n  (log2n代表2的多少次方等于n),其中log2n代表组数、n*log2n代表所有数的对换次数所用的时间。

实例说明

代码:

def kuaiPai(num):

da,zhong,xiao=[],[],[]

if len(num)<=1:

return num

pivo=num[0]

for i in range(len(num)):

if i>num[0]:

da.append(i)

elif i<num[0]:

xiao.append(i)

else:

zhong.append(i)

less=kuaiPai(xiao)

more =kuaiPai(da)

return less+zhong+more

图解

原文地址:https://www.cnblogs.com/wangdadada/p/12101277.html

时间: 2024-11-07 00:39:26

快排算法的深入理解的相关文章

随机快排算法

1 package Sort; 2 3 import org.junit.Test; 4 5 // 随机快排算法 6 public class RandQuickSort { 7 8 // 交换数组中的两个元素 9 public void exchange(int[] array, int index1, int index2) { 10 int tmp = array[index1]; 11 array[index1] = array[index2]; 12 array[index2] = t

关于快排算法的学习

写在前面: 算法设计与分析,这门课其实在大学都学习过,也受到了很多启发,只是隔了很久,大多已经忘记了,想趁这个机会重新学习一下. 因为刚开始学习,可能初期的博客内容大多是跟着前辈们学习的,后面可能会尝试总结一些笔记和心得,看看能不能启发一些其他的方面. 下面是找的关于快排的一些资料,这篇觉得确实不错,原地址:https://blog.csdn.net/yzllz001/article/details/50982841 高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是"快速排序

快排算法实现

public class QuickSort { public static void sort(int arr[],int low,int high){ int l=low; int h=high; int temp=arr[low]; while(l<h) { while(l<h&&arr[h]>=temp) h--; arr[l]=arr[h]; while(l<h&&arr[l]<=temp) l++; arr[h]=arr[l]; }

python快排算法

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 1 def kp(arr,i,j): 2 if i < j: 3 base = kpgc(arr,i,j) 4 kp(arr,i,base) 5 kp(arr,base+1,j) 6 def kpgc(arr,i,j): 7 base = arr[i] 8 while i < j: 9 whil

快排算法的简单实现

java实现: 细节和注解都在注释在代码中了. 1 private static int position(int[] ary,int low,int high){ 2 int i = low,j = high+1; 3 int pivot = ary[low];//选定中轴元素 4 while(true){ 5 while(ary[++i] < pivot) {//遇到大于等于pivot时停下 6 if (i == high) {break;}//此处有必要检查,当pivot刚好为当前序列的最

排序算法-冒泡——插入——快排

冒泡排序,往两个方向泡,一个往小泡,一个网大泡 #include<stdio.h> #include<stdlib.h> #include<time.h> void bubble_sort(int *a,int n){ int temp; for(int i=0;i<n;i++) for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } v

F#之旅4 - 小实践之快排

参考文章:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-quicksort.html F#之旅4 - 小实践之快排 这次这篇呢,就不翻译了,因为原文确实是相当的简单.先贴一下能跑的代码: 这里贴的不是文本,如果你也想尝试一下,建议你抄一遍,或者理解之后自己写一遍.来看看都有那些要注意的点吧: 1.快排算法,这里用的递归的形式,把所有数分成三部分,[比第一个元素小的部分] [第一个元素] [比第一个元素

关于利用快排思想求第K小数的分析

最近复习快排算法,记得当时最有意思的是可以用快排的partition函数求出第K小数 于是上网搜索一番,发现都只是贴出了代码.无奈只好自己研究了下 利用快排partition求第k小数不得不从partition函数开始说: 快速排序的思想是在一组待排序的数中,找出一个数作为分界,使得它前面的数都比它小,后面的数都比它大.这个数叫做枢轴 当求出一组数的枢轴以后,一组数就可以以枢轴为界限分成两组,我们可以递归的找出这两个组的枢轴,只到每组只有一个数 这里我们应该注意的是,partition函数返回的

大话快排 和 归排的渊源

一:起因 (1)包括冒泡算法.快排算法.插入排序算法等:还有基于外部排序的归并排序(以二路归并排序为例 ) 但是基本上在一个数量级上: (2) mergesort (归并排序) 可以应用在外部排序,这与基于内存的quicksort(快速排序)略有不同,他们的算法复杂度都可以达到O(nlogn) (3)mergesort 是稳定的排序算法,需要额外的空间开销O(n):quicksort 是非稳定的排序算法,额外的空间开销O(1):两者的核心思想都来源与分支的策略(divide and conque