JS冒泡排序,快速排序,二分查找

//冒泡排序

思想:一个数组双层循环,判断左右相邻的两个数值,大的在右小的在左,如果左的比右的大,双方替换位置

之所以要数组的长度减一,是因为数组是从0开始的,比如说一个数组有7个元素,它的长度为7,分别为
a[0],a[1],a[2],a[3]a[4],a[5],a[6]这7个所以当你要取数组中最后一个a[6]时是需要用长度减1的
而为什么要减i呢,则是因为你的冒泡排序是把最大的放到最后一位,比如第一次循环的时候进行排序完,最后一位是最大的了,根本没有必要在第二次循环当中把他在拿去比大小了吧,并且如果不减i的话,只能排出最大一位(可以用来进行求数组中最大的值),以此类推……

var arr=[2,1,3,5,4,6];

function test(arr){

for(var i=0;i<arr.length-1;i++){    //-1是因为你要循环这个数组的长度-1次。因为前一轮浮上去的最大值不可能后面出现能比过它的

for(var j=0;j<arr.length-1-i;j++){   //-1-i是因为他的长度在不段变小,

if(arr[j]>arr[j+1]){

var temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=arr[j];

}

}

}

return arr;

}

//快速排序

思想:给数组找一个中间的分割点,把数组分成左右两区,用数值去比较这个中间值,小的放左区,大的放右区,然后递归调用,实现快速排序

function test1(arr){

if(arr.length<=1){ return arr}

var left=[],right=[],mid=arr.splice(Math.floor(arr.length/2),1);

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

if(arr[i]<mid){

left.push(arr[i]);

}else{

right.push(arr[i]);

}

}

return test1(left).concat(mid,test1(right));

}

//二分查找

//非递归调用,适用于数组存在负数值查找

function test3(data,das){

var  max=data.length-1;

var min=0;

while(min<=max){

var mid=Math.floor((min+max)/2,1);

if(data[mid]==das){

return mid;

}  else if(das>data[mid]){

min=mid+1;

}else{

max=mid-1;

}

}

return false;

}

原文地址:https://www.cnblogs.com/JQ-Attribute/p/9053597.html

时间: 2024-10-10 10:33:55

JS冒泡排序,快速排序,二分查找的相关文章

C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)

C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆) 虽然直接插入排序,冒泡排序以及二分查找是算法中最为基础以及老掉牙的话题,但作为一名算法的深爱者,有时候无聊时候总会将这些简单的话题重新理解并敲写一番,目的只是为了得到理解娴熟的程度.而且,我觉得越是简单基础的东西,有时候更应该反复的去敲写,深化它,并最终让其中的思想内化为自己的一部分.待到他日一提起之时,会相当娴熟的"刷刷刷..."几分钟搞定,那就很有成就感了! 因为我喜欢对于一个问题进行实例的剖析,进而再转化为特有的用某种

js基本算法:冒泡排序,二分查找

知识扩充: 时间复杂度:算法的时间复杂度是一个函数,描述了算法的运行时间.时间复杂度越低,效率越高. 自我理解:一个算法,运行了几次时间复杂度就为多少,如运行了n次,则时间复杂度为O(n). 1.冒泡排序 解析:1.比较相邻的两个元素,如果前一个比后一个大,则交换位置. 2.第一轮的时候最后一个元素应该是最大的一个. 3.按照步骤一的方法进行相邻两个元素的比较,这个时候由于最后一个元素已经是最大的了,所以最后一个元素不用比较. 1 function sort(elements){ 2 for(v

Java冒泡排序和二分查找(预习)

经查阅,将资料整理如下: 一.冒泡排序 1.算法简介 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名. 2.算法原理 (1)比较相邻的元素.如果第一个比第二个大,就交换他们两个. (2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. (3)针对所有的元素重复以上的

选择、冒泡排序,二分查找法以及一些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 package com.hanqi; 2 3 public class maopao { 4 5 public static void main(String[] args) { 6 int[]array=new int[]{63,4,24,1,3,13}; 7 System.out.println("冒

【C/C++】冒泡排序与二分查找

冒泡排序:就是相邻两个数进行比较,如果a>b(或者a<b)则交换值,每次把一个最大(或者最小)的值往后推. 二分查找:每次取头和尾的中间下标的值a与目标值b进行比较,如果a>b表示目标值b在中间下标前面,把头指向中间下标的前一位:如果a<b表示目标值b在是中间下标后面,把尾指向中间下标的后一位:如果a==b则返回中间下标.查找失败返回-1. 1.随机初始化一个指定长度的数组. 2.对数组进行排序. 3.输入一个值,并查找该值在数组中的下标.

关于数组的几个小题目-冒泡排序、二分查找、直接选择排序、反转数组

1. 实现冒泡排序算法,对比相邻元素,如果满足条件就叫唤元素值,把较小的元素移动到数组前面,把较大的元素移动到数组的后面,这样较小的元素就逐渐从底部上升到顶部,排到前面了. public class zuoye14_maopaopaixu { public static void main(String[] args){ int[] array = new int[]{12,45,21,35,65,24,43}; for(int i=0;i<array.length;i++){ for(int

0913作业(冒泡排序、二分查找法、模拟摇乐游戏)

1.冒泡排序从小到大打印出(代码如下) package f.java; public class LS { public static void main(String[] args) { // TODO Auto-generated method stub int[]i={10,20,30,14,15,26}; for(int a=0;a<i.length;a++) { for(int b=a+1;b<i.length;b++) { int temp; if(i[a]>i[b]) {

C基础--冒泡排序和二分查找法

#include <stdio.h> #include <time.h> #include <stdlib.h> #define N 10 void init_arry(int a[], int n) { int i; srand(time(NULL)); for (i = 0; i < n; i++) a[i] = rand() % 100; } void show_arry(int a[], int n) { int i; for (i = 0; i <