//算法-快速排序
var cc=cc||console
function exchange(A,p1,p2){
if(p1!=p2){
var temp=A[p1]
A[p1]=A[p2]
A[p2]=temp
}
}
function quicksort(A,p,r){
if(p<r){
var q=partition(A,p,r)
quicksort(A,p,q-1)
quicksort(A,q+1,r)
}
}
function partition(A,l,r){
//保存最后一个值
var x=A[r]
//左标
var p=l-1
for(var i=l;i<r;i++){
if(A[i]<=x){
p=p+1
//交换插入
exchange(A,p,i)
}
}
exchange(A,p+1,r)
return p+1
}
var arr=[15,1,34,3,23,12,45,56]
//quicksort(arr,0,arr.length-1)
//cc.log(arr)//=>[ 1, 3, 12, 15, 23, 34, 45, 56 ]
function randomized_partition(A,l,r){
var p=0|Math.random()*(r-l)+l
exchange(A,r,p)
return partition(A,l,r)
}
//快速排序 随机化版本
function randomized_quicksort(A,l,r){
if(l<r){
var q=randomized_partition(A,l,r)
randomized_quicksort(A,l,q-1)
randomized_partition(A,q+1,r)
}
}
randomized_quicksort(arr,0,arr.length-1)
cc.log(arr)
5.算法-快速排序
时间: 2024-11-03 17:29:40
5.算法-快速排序的相关文章
编程算法 - 快速排序算法 代码(C)
快速排序算法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 经典的快速排序算法, 作为一个编程者, 任何时候都要完整的手写. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> int RandomInRange(int min,
Java算法快速排序
快速排序的原理:每次将序列以一个值为界限分成两组,在将两个序列分别以一个界限分成两组这样一直分下去. int[] a = {11,222,44,63,84,11,24,53,123,25,98,76,34}; 第一步:以34将数组a分成两组 11, 25, 24, 11 34, 63, 44, 53, 123, 222, 98, 76, 84 第二步:以11将11, 25, 24, 11分为两组 11, 11, 24, 25.以84将34, 63, 44
重点算法--快速排序
#include<iostream> using namespace std; ////写出快速排序,归并排序与堆排序 int adjustarray(int a[],int left,int right) { int x = a[left]; while(left < right) { while(a[right] > x && left < right) right--; ///注意这个小于的范围 if(left < right ) {a[left]
排序算法----快速排序java
快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class test02{ public static void main(String[] args) { int n = 1; while (n != 0){ Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); int s[] = ne
[数据结构和算法]快速排序笔记
特点:1.是冒泡的改进2.是一个递归的过程3.不稳定 4.时间复杂度:O(nlogn) 设要排序的数组是A[0]...A[n-1],首先取数组的第一个数作为关键数据,然后将所有比它小的数都放到它的前面,比他大的都放到他的后面,这个过程被称为一趟快速排序 算法步骤:1.设置两个变量i,j,排序开始i = 0, j = N-1;2.以第一个数组元素作为关键字,Key = A[0];3.从J开始向前搜索,即由后开始向前搜索j--, 找到第一个小于key的值A[j],将A[j]赋值给A[i]4.从I开始
经典排序算法 - 快速排序Quick sort
经典排序算法 - 快速排序Quick sort 原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 举个例子 如无序数组[6 2 4 1 5 9] a),先把第一项[6]取出来, 用[6]依次与其余项进行比较, 如果比[6]小就放[6]前边,2 4 1 5都比[6]小,所以全部放到[6]前边 如果比[6]大就放[6]后边,9比[6]大,放到[6
算法---快速排序(quick sort)
在前面介绍的排序算法中,最快的排序算法为归并排序,但是归并排序有一个缺陷就是排序过程中需要O(N)的额外空间.本文介绍的快速排序算法时一种原地排序算法,所需的额外空间复杂度为O(1). 算法介绍:快速排序其实一种根据需找某个元素的具体位置进行排序的方法.比如所存在如下数组 选择第一个元素5,找到5最终的位置,即5的左边的数都小于或者等于5,右边的数都大于或者等于5. 从"6"开始,可知6大于5,此处停住,从"2"开始2小于5,因此交换6与2的位置,然后接着往下走,将
排序算法----快速排序(链表形式)
单链表形式实现排序算法. 这个快速排序主要利用递归调用.包含4个文件,头文件QuickSort.h,fatal.h,库函数QuickSort.c,测试文件TestQuickSort. QuickSort.h 1 typedef long ElementType; 2 #ifndef _List_H//如果没有编译过 3 #include<stdbool.h> 4 struct Node; 5 typedef struct Node *PtrToNode; 6 typedef PtrToNode
算法--快速排序(链表)
快速排序 http://m.blog.csdn.net/blog/u013071074/36867589 快速排序是由C. A. R. Hoare所发展的一种排序算法.其基本思想是基本思想是,通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序. 快速排序使用分治法来把一个串(list)分为两个子串行(sub-lists). 步骤为: 1.从数列中挑出一个元素,称为 "基准"(pivot), 2.