俩头查找的快排优化

对于 5743 经典快排过程:

  1. 5473
  2. 5437

会造成多次替换,所以写出优化算法:

  1. 去第一位为基准值
  2. 从左向右扫 发现大值
    1. 从右向左扫 发现小值 替换
  3. 将基准值和最后一个小值替换
function quick(arr, start, end) {
    if (start >= end-1) {
        return;
    }
    var mini = start;
    var maxi = end;
    var split = arr[start];
    while (mini < maxi) {
        var minv = arr[mini];
        if (minv > split) {
        	var find=false;
            while (mini < maxi) {
                maxi--;
                var maxv = arr[maxi];
                if (maxv <= split) {
                	find=true;
                    arr[mini] = maxv;
                    arr[maxi] = minv;
                    break;
                }
            }
            if(!find){
            	break;
            }
        }
        mini++;
    }
    arr[start]=arr[mini-1];
    arr[mini-1]=split;

    console.log(arr.slice(start,end));

    quick(arr, start, mini - 1);
    quick(arr, mini, end);
    return arr;
}

P.S. 算法好想 边界问题消耗了n长时间 特别是find

时间: 2025-01-02 15:45:12

俩头查找的快排优化的相关文章

验证元素的唯一性(二重循环法和快排优化)

学校练习,简单的我就不放上来了,值得整理的,我保存一下 习题4 1.1.验证元素唯一性(二重循环)   1.1.1.算法描述 验证元素唯一性,主要方法是:建立两重循环,进行校验每个元素和其他元素的 1.1.2.伪代码   UniqueElements(A[0..m-1]) //验证给定数组中的元素是否唯一 //输入:数组A[0..n-1] //输出:如果A中元素全部唯一,返回true //否则返回false for i<- 0 to n-2 do for j<- i+1 to n-1 do i

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

今天集中把几种排序的方法列一下,当然最出名的希尔,快排,归并和其优化当然也是满载 说到希尔排序的话,不得不先提到的就是插入排序了,希尔排序就是对直接插入排序的一种优化,下面就是直接插入排序的思想 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 -

淘宝等seo广告里面所讲的三天上首页的快排技术大揭秘

淘宝等seo广告里面所讲的三天上首页的快排技术大揭秘 淘宝seo快排技术 今天,我在志在指尖群里面看了看,有人说做一个排名其实非常的简单(我去,简单?想做好seo这是何等漫长的一个事情,谈何简单)我们都知道,做好seo,不仅要做好站内,也要做好站外,不管是关键词布局,内链布局等,还是外链创设,在这是文章书写等,这都是需要很大耐心以及技术的.所以,我没打扰他,我就想听听他口中所谓seo'简单'二字是什么意思,结果意想不到,他就直说了四个字-淘宝快排-what fuck?这四个字让我笑得肚子疼(这里

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

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

单链表的排序(快排和冒泡实现)以及查找中间结点

//快排,冒泡链表排序 #include<iostream> #include<assert.h> using namespace std; template<class T> struct LinkNode { T _data; LinkNode* _next; LinkNode(const T& x) :_data(x) , _next(NULL) {} }; template<class T> class ListNode { //为了安全性

用js写了个快排,还有优化的余地

看了一天别人的代码,换换思路,写个快排. 直接上代码,低估了,原理一直记得,本以为10分钟能搞定,但出现很多小bug,整了20多分钟. /** * Created by cdpmac on 15/5/15. */ var arr = [5, 3, 7, 4, 1, 9, 8, 6, 2]; quickSort(arr,0,arr.length-1); console.log(arr); function quickSort(arr,left,right){ if( left>=right){ r

seo快排技术/seo快速排名/搜索引擎快速排名/百度快速排名/搜索引擎快排/百度排名/百度优化/百度快排

seo快排技术/seo快速排名/搜索快速排名/百度快速排名/搜索引擎快排/搜索引擎快速排名技术的强大工具: 泛目录技术是目前最快速有效的办法,增加站点的收录方面,这里推荐莲花泛目录 莲花泛目录,完善的技术支持,代码亲自编写,独立研发.业界领先. 莲花泛目录程序强大之处: 1.内容分类详细2.自动推送URL链接3.内置超强原创内容功能系统,页面深受百度搜索引擎喜爱.4.蜘蛛触发繁殖:蜘蛛触发程序任何页面,程序自动生成独立页面并引导繁殖.5.操作容易简单:全部采用web界面配置,简单鼠标点击操作即可

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

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

Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排序.快速排序(重点).堆排序.归并排序等等.看下图: 给定数组:int data[] = {9,2,7,19,100,97,63,208,55,78} 一.直接插入排序(内部排序.O(n2).稳定) 原理:从待排序的数中选出一个来,插入到前面的合适位置. [java] view plain copy