二分排序法

<pre>

<script type="text/javascript">

//二分排序法从小到大排序

/*算法原理:

把一组数中的N个数分为三个部分:

第1部分、中间选一个

第2部分、小于中间的一个放左边

第3部分、大于中间的一个放到右边

重复以上步骤,直到排好为止。重复次数是不确定的根据元素多少和元素顺序都有关系

假设有数组: [7,6,9,5,3];

第一次:

取出中间一项9,如果是偶数项比如4个可以取第二个或第三个都行的。

把小于9的放到左边数组中,大于9的放到右边数组中,变成了以下样子。

[6,7,5,3] 9 [];

第二次

因为9后面为空所以9及其后面的就都确定了。问题规模变小了变成了是对

[6,7,5,3] 进行排序

取出中间项:7 把小于7的放左边大于7的放右边

[6,5,3] 7 []

第三次

重复以上思路取出 [6,5,3] 中的中间项 5把小于放左边大于的放右边。

[3] 5 [6]

排序完毕(对于小于等于1项的无需进行排序。)

最后递归倒着返回结果

[3] 5 [6] 7 9

*/

//二分排序法代码实现:

var arr = [7,6,9,5,3];

function quickSort(arrT)

{

  if (arrT.length <= 1) { return arrT; }

  var pivotIndex = Math.floor(arrT.length / 2);

  var pivot = arrT.splice(pivotIndex, 1)[0];

  var left = [];

  var right = [];

  for (var i = 0; i < arrT.length; i++)

{

    if (arrT[i] < pivot)

{

      left.push(arrT[i]);

     } else {

      right.push(arrT[i]);

    }

  }

  return quickSort(left).concat([pivot], quickSort(right));

};

document.writeln (quickSort(arr));

</script>

时间: 2024-08-25 20:57:05

二分排序法的相关文章

Java学习 (七)、数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

一.常用数组查找算法 工作原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每个元素,知道找到所需元素的过程. 例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1 1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.o

利用选择排序排序数组,用二分查找法查找

#include <stdio.h> #include <iostream> using namespace std; int main() { int a[] ={1,8,45,12,75,466,25,65,14,56,53}; int t; int length; length =sizeof(a)/sizeof(a[0]); for(int i=0;i<length;i++) { for(int j=i+1;j<length;j++) { if(a[i]>

冒泡排序法与二分查找法

冒泡排序(Bubble Sort) 是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名. 算法原理 冒泡排序算法的运作如下:(从后往前) 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该

选择、冒泡排序,二分查找法以及一些for循环的灵活运用

import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] array = { 31, 22, 15, 77, 52, 32, 18, 25, 16, 7 }; // 冒泡 --> 两两比较 --> 提取出最大的数 在最后一位 //拿第一位和它后面的一位进行 两两比较 System.out.println(Arrays.toString(array)); fo

二分查找法以及拉格朗日插值查找法

不管是二分查找法还是拉格朗日法,必须先排序,否则无法使用. 插值查找发速度比二分查找法要快 插值查找法,数据均匀是1次找到,不均匀是多次,即使这样这样它也是快于二分的. 那个1.0挺重要的一个技巧,将那个比例变成实数. #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> #define N 1024 void search(int a[N],int num) { int tou = 0; int

查询资料:二分查找法

二分查找 编辑 同义词 二分查找法一般指二分查找 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到

二分查找法 冒泡排序法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好; 其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表. 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功; 否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. 二分查找

二分查找法-java实现

二分查找法就是对一个从小到大排好序的数组中寻找一个数val,先用待找的数val和中间值比较,如果比中间值大,那么在中间值右边寻找:如果比中间值小,那么在中间值左边寻找.一直递归下去.知道找到val.如果没找到,则输出在序列里面没有相关的数据. package com.PengRong.A; public class BinaryFind { public static void main(String[] args) { // TODO Auto-generated method stub in

基于二分查找法的数值区间查找

1.问题定义: 在有序数组中,查找在输入数组满足大于某值a,小于某值b的所有元素.其中a和b可以不在数组中. 2.举例描述: 输入数组eg:{2,7,8,11,16,26,31,33,37,40,45,49}.查找满足大于10小于30的所有数字,则输出的结果为{11,16,31}子集.若查找大于50或小于2则输出空集. 3.线性扫描方式: 复杂度O(n) 从左到右扫描满足条件的区间 4.二分查找方式: 复杂度O(logN)二分查找满足条件的区间,两次二分查找,确定子数组范围. auto bina