快排理解

int i,j ,key;
int a[n];

void partition(a,p,q-1)
{
    key = a[p];
    i = 0,j = 1;
    for(j = 1;j<=q-1;j++)
       {
            if(a[j]<key)
            {
                i++ ;
                exch(a[j],a[i]);
            }
        }
       exch(a[++i],a[n]);

 return i;
}
void qsort()
{
  partiton(a,p,q-1);
  qsort(a,0,p);
  qsort()    

}

  

时间: 2024-07-31 20:09:40

快排理解的相关文章

快排,随机快排,双路快排,三路快排的理解

再讲快排之前,首先对于任何一个数组,无论之前是多么杂乱,排完之后是不是一定存在一个数作为分界点(也就是所谓的支点),在支点左边全是小于等于这个支点的,然后在这个支点右边的全是大于等于这个支点的,快排过程就是寻找这个支点过程 先看普通的快排(普通单路快排) 代码如下 let findIndex = (arr, l, len) => { let par = arr[l], j = l for (let i = l + 1; i <= len; i++) { if (arr[i] < par)

字符串查找(二分和快排的运用)

Description 现在给你一个字典,再给出几个字符串,让你查找,这些字符串是否在其中. Input 第一行是两个整数M,N分别表示字典数和字符串数. 第2至第M+1行,每一行是一个字典. 第M+2至第M+2+N行是徐查找的字符串. (n<=10,0000, m<=20,0000, 字符串长度不超过10,且均为小写字母) Output 共N行,每行表示第i个字符串在不在字典中,用0表示不在,1表示在. Sample Input 5 3 acc cat multiply do will ac

排序--QuickSort 快排

Quick の implementation 快排,就像它的名字一定,风一样的快.基本上算是最快的排序算法了.快排的基本思想是选择一个切分的元素.把这个元素排序了.所有这个元素左边的元素都小于这个元素,所有这个元素右边的元素都大于这个元素.接着再把左右2个数组分别排序. 假设你有如下数组 (所有 i  左边的对象都小于 切分对象. 所有 j  右边的对象都大于切分对象 这句话稍后有用 先知道一下) 首先,我们把index = 0 的元素当作切分元素. 从index = 1 的位置开始,找到第一个

排序 之 快排and归并&lt;时间复杂度&gt;----掌握思想和过程

俗话说:天下武功无坚不破,唯快不破.对于算法当然也是要使用时间最短.占用空间最小的算法来实现了. 注意:我代码里面打的备注仅供参考,建议不要背模板(因为没有固定的模板),可以写一个数列按着代码跑两圈或者把代码改一下输出每次排序后的结果. 总之,师傅领进门,修行在个人.奋斗把!骚年! ※冒泡排序.选择排序:(不稳定,时间复杂度 O(n^2)) 1 #include "cstdio" 2 #include "iostream" 3 using namespace std

Coursera 数据结构 清华 邓俊辉 第十二章 漫谈快排

引言 ? ? 本文从多个方面讲解了快速排序的知识点,包括快排分而治之的思想,以及他与归并排序注重点的不同,快排的性能,包括最优最差以及平均性能,并以均匀分布为例,证明了快排的平均性能是1.39*(n+1)logn,接下来又从熵的角度说明了一下快排为什么下界只能达到nlogn,为什么堆排比快排慢,而基排又能够逃脱nlogn的界限,因为nlogn只针对基于比较的排序算法 ? ? 快排的思想 ? ? 快排采取分而治之的思想,将待排序的序列分为两个子序列S分为SL和SR两个子序列,这个思想跟归并排序有点

poj 2804 词典 (字典树 或者 快排+二分)

2804:词典 总时间限制:  3000ms  内存限制:  65536kB 描述 你旅游到了一个国外的城市.那里的人们说的外国语言你不能理解.不过幸运的是,你有一本词典可以帮助你. 输入 首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行.每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开.而且在词典中不会有某个外语单词出现超过两次.词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包括一个外语单词.输入中出现单词只

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

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

自己写快排模板与C++快排库函数使用

自己写快排模板与C++快排库函数使用 1.自己写快排模板 我理解的快速排序思想原理是: 假定待排序数组的范围是0~N 1.在一个数组中找一个数作为中心点M(可以使用固定位置的数,也可以随机的采用数组中的数) 2.把数组中所有的数与这个中心点进行比较.小于中心点的数移到中心点左边,大于中心点的数移到中心点右边. 3.经过上面两步可以得到由M点所划分的两个数组(一个数组都小于等于M,一个都大于等于M),再对这两个数组递归的进行1.2所示步骤,知道划分的数组大小为0: 快排思想实现的主要的重点难点在于

排序详解(希尔,快排,归并等)

今天集中把几种排序的方法列一下,当然最出名的希尔,快排,归并和其优化当然也是满载 说到希尔排序的话,不得不先提到的就是插入排序了,希尔排序就是对直接插入排序的一种优化,下面就是直接插入排序的思想 1 void InsertSort(int *a, size_t size) 2 { 3 assert(a); 4 for (int i = 1; i < size; ++i) 5 { 6 int index = i; 7 int tmp = a[index]; 8 int end = index -