JavaScript排序算法——快速排序

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>快速排序</title>
<!--<link rel="stylesheet" type="text/css" href="../style/fdt.css" />-->
<script type="text/javascript" src="../js/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="../js/jquery.easydrag.handler.beta2.js"></script>
<script type="text/javascript">

	$(document).ready(
		function() { 

			var array_1 = [4,5,3,1,2];
			alert(array_1);
			/*quickSort*/
		    alert(quickSort(array_1));

		}
	); 

</script>

<style type="text/css">

	* { padding:0; margin:0; }

	body {
		padding: 100px;
		font-size: 15px;
	}

</style>

<script type="text/javascript">
	function quickSort(array){
		//var array = [8,4,6,2,7,9,3,5,74,5];
		//var array = [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];
		var i = 0;
		var j = array.length - 1;
		var Sort = function(i, j){

			// 结束条件
			if(i == j ){ return };

			var key = array[i];
			var stepi = i; // 记录开始位置
			var stepj = j; // 记录结束位置

			while(j > i){
				alert(array);
				// j <<-------------- 向前查找
				if(array[j] >= key){
					j--;
				}else{
					array[i] = array[j]
					//i++ ------------>>向后查找
					while(j > ++i){
						if(array[i] > key){
							array[j] = array[i];
							break;
						}
					}
				}
			}

			alert(array);
			alert("i="+i+",j="+j+",stepi="+stepi+",stepj="+stepj);

			// 如果第一个取出的 key 是最小的数
			if(stepi == i){
				Sort(++i, stepj);
				return ;
			}

			// 最后一个空位留给 key
			array[i] = key;

			// 递归
			Sort(stepi, i);
			Sort(j, stepj);
		}

		Sort(i, j);

		return array;
	}

</script>

</head>

<body>
	<div>快速排序</div>
</body>
</html>
时间: 2024-10-06 02:46:51

JavaScript排序算法——快速排序的相关文章

排序算法----快速排序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

经典排序算法 - 快速排序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

JavaScript 排序算法

排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个对象呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来.通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序. JavaScript的Array的sort()方法就是用于排序的,但是排序结果可

排序算法----快速排序(链表形式)

单链表形式实现排序算法. 这个快速排序主要利用递归调用.包含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

排序算法--快速排序

快速排序之所以特别快,主要是由于非常精炼和高度优化的内部循环. 像归并排序一样,快速排序也是一种分治的递归算法.数组S排序的基本算法由下列简单的四部组成: 1.如果S中元素个数是0或1,则返回 2.取S中任一元素v,称之为pivot(枢纽元,主元,基准) 3.将S-{v}分成两个不想交的集合:S1={x∈S-{v} | x <= v} 和 S2={x∈S-{v} | x > v} 4.返回{QuickSort(S1)后,继随v,继而QuickSort(S2) 为了完成上述的步骤3,有两种常用方

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

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

JavaScript排序算法(希尔排序、快速排序、归并排序)

以var a = [4,2,6,3,1,9,5,7,8,0];为例子. 1.希尔排序. 希尔排序是在插入排序上面做的升级.是先跟距离较远的进行比较的一些方法. function shellsort(arr){ var i,k,j,len=arr.length,gap = Math.ceil(len/2),temp; while(gap>0){ for (var k = 0; k < gap; k++) { var tagArr = []; tagArr.push(arr[k]) for (i

白话排序算法--快速排序

前言: 写到快速排序时,之前已经进行了冒泡.选择.插入排序,发现算法问题很多东西都是和实际问题相逆的,实际你可能会由外及里,由上及下,可是算法里面它有时就需要你由里往外去扩散,好比最里面的是小成果,然后一次次往外变化,成果也慢慢变大,最后直至达到最终成果为止.本篇快速排序方法因为调用了递归,你就可以逆着由里及外来思考问题. 写这篇文章光画图就花费了我2小时时间,越抽象就越不好形容和比喻,画的不好,希望各位不要吐槽. 快速排序:先快速排序将队列一分为二,然后对每个队列进行递归调用快速排序方法,直至

排序算法--快速排序算法解析

一.快速排序算法思路 ①.取待排序列表的第一个元素p,通过归位算法,挪移他到列表中正确的位置. ②.列表被元素p分成两部分,左边都比元素p小,右边都比元素p大. ③.通过递归,在两部分,重复1.2步骤,直至列表有序. 归位算法动画演示: 二.快速排序算法代码示例 1 def partition(l,left,right):#归位算法 2 temp = l[left] #保存归位元素 3 while left <right: 4 while l[right]>=temp and left<