高级排序算法——快速排序(一种分而治之的算法)

    function qSort(arr) {
        if (arr.length <=1) {
            return arr;
        }
        var left = [];
        var right = [];
        var pivot = arr[0];
        for ( var i = 1; i < arr.length; i++) {
            if (arr[i] < pivot) {
                left.push(arr[i]);
            } else {
                right.push(arr[i]);
            }
        }
        return qSort(left).concat(pivot, qSort(right));
    }

    var a = new Array(23);
    function setData(a) {
        for ( var i = 0; i < a.length; ++i) {
            a[i] = Math.floor((Math.random() * 100) + 1);
        }
    }
    function prints(arr) {
        for ( var i = 0; i < arr.length; ++i) {
            document.write(arr[i] + " ");
            if (i > 0 & i % 10 == 0) {
                document.write("<br />");
            }
        }
    }
    setData(a);
    var b = qSort(a);//注意qSort()方法是有返回值的,而不是直接对a进行操作
    prints(b);
时间: 2024-10-08 02:59:27

高级排序算法——快速排序(一种分而治之的算法)的相关文章

VLBP基本算法和一种改进的算法IVLBP

VLBP ——variable learning rate 可变学习速率的BP VLBP算法基本思想 一种改进的可变学习速率的BP神经网络算法IVLBP https://wenku.baidu.com/view/c4723e3043323968011c9283.html 原文地址:https://www.cnblogs.com/rinroll/p/12167071.html

javascript数据结构与算法--高级排序算法

高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法---- 希尔排序和快速排序. 一:希尔排序: 希尔排序的核心理念是:首先比较距离较远的元素,而非相邻的元素. 基本原理:通过定义一个间隔序列来表示在排序过程中进行比较的元素之间有多远的间隔. 下面我们来看看数组[0,9,1,8,7,6,2,3,5,4] 来使用希尔排序的原理:如下图: 代码分析如下: 1. 执行 "间隔序列=3的步骤" A.

php 实现冒泡算法排序、快速排序、选择排序,插入排序

许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要掌握的.下面是我按自己的理解,将四个方法分析一遍. 需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中 的值按照从小到的顺序进行排序.  $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序法   *     思路分析:法如其名,就是像冒

高级排序算法之快速排序

快速排序是一个高级排序算法,算法核心思想:确定每一个值的正确位置,即该值左边为小,右边为大即可 这个算法实现上面也是需要经过递归,一般取第一个值开始进行排序 当然也有特别需要注意的地方 设 需要找正确位置的值 定义为 arr[ l ]  = v; 此时需要比较 值 e 与 v 的关系,无非两种(三种即多一个等于) 若e > v ,则无话可说,无需移动,继续移动游标比较arr[ i + 1]  与 v 的大小 若 e < v,则需要交换  e  和 arr [ j + 1 ] 的值,并需要将 j

java八种排序算法---快速排序

快速排序基本思想:挖坑填数+递归分治 快速排序使用分治法的策略,把一个串行分成2个子串行,快速排序又是一种分而治之的思想在排序算法是上的典型应用,本质上看,快速排序应该算冒泡排序基础上的递归分治法,快速排序名字简单粗暴,顾名思义就是快而且效率高,它是处理大数据最快的算法之一了. 算法描述:1.从数列中任意挑出一个数作为基准(pivot) 2.重新排序,所有比基准大的数放在基准左边,所有比基准大的数放在基准右边,这样排序一遍后该基准就位于数列的中间,这个就被称为分区操作(partition) 3.

数据结构与算法之--高级排序:shell排序和快速排序【未完待续】

高级排序比简单排序要快的多,简单排序的时间复杂度是O(N^2),希尔(shell)排序的是O(N*(logN)^2),而快速排序是O(N*logN). 说明:下面以int数组的从小到大排序为例. 希尔(shell)排序 希尔排序是基于插入排序的,首先回顾一下插入排序,假设插入是从左向右执行的,待插入元素的左边是有序的,且假如待插入元素比左边的都小,就需要挪动左边的所有元素,如下图所示: ==> 图1和图2:插入右边的temp柱需要outer标记位左边的五个柱子都向右挪动 如图3所示,相比插入排序

九种经典排序算法详解(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序,计数排序,桶排序,基数排序)

综述 最近复习了各种排序算法,记录了一下学习总结和心得,希望对大家能有所帮助.本文介绍了冒泡排序.插入排序.选择排序.快速排序.归并排序.堆排序.计数排序.桶排序.基数排序9种经典的排序算法.针对每种排序算法分析了算法的主要思路,每个算法都附上了伪代码和C++实现. 算法分类 原地排序(in-place):没有使用辅助数据结构来存储中间结果的排序**算法. 非原地排序(not-in-place / out-of-place):使用了辅助数据结构来存储中间结果的排序算法 稳定排序:数列值(key)

高级排序算法之归并排序,快速排序

前言 承接上文基础排序算法-冒泡,插入,选择,相比之下,归并排序和快速排序更为高效,时间复杂度均为O(nlogn),相比简单排序的O(n^2)好了很多,下面介绍一下这两种算法的思路,实现和主要指标.主要思路来自<数据结构与算法之美> 正文 归并排序 主要思路 在归并排序采用分冶的思想,使用递归实现.描述如下 开始归并排序 如果数组元素小于两个,无需排序,结束 否则需要排序,归并排序数组左侧,归并排序数组右侧,按序合并左右侧 采用的是自顶至下的思路,例如[1,5,3,7,4,6],左侧为[1,5

Java中的几种排序算法:冒泡排序,插入排序,二分法排序,简单排序,快速排序

冒泡排序: int[] hehe={4,7,2,5,6,9,0}; for(int i=0;i<hehe.length;i++){ for(int j=i+1;j<hehe.length;j++){ if(hehe[i]>hehe[j]){ int temp=hehe[i]; hehe[i]=hehe[j]; hehe[j]=temp; } } } 插入排序 int[] a={13,7,8,9,10,1,2,32}; int i,j,t,h; for (i=1;i<a.length