冒泡排序和简单的递归

javascript中 ,冒泡排序也是很重要的一种排序方式,这种方式有固定的格式

var arr1=[2,31,33,54,65,-32];function f1(arr){    for(var i=0;i<arr.length;i++){        for(var j=0;j<arr.length-i-1;j++){ // 这里用length-i-1 是因为每一次比较之后,都可以减少下次的排序次数。            if(arr[j]<arr[j+1]){ //此条决定是按顺序还是倒序排列                var temp=arr[j]; //temp的作用是给予一个中转点,用于临时存储值,方便arr[j]和arr[j+1]调换位置                arr[j]=arr[j+1];                arr[j+1]=temp;            }        }    }return arr;}

console.log(f1(arr1));

简单的递归

递归算法是重要的一种算法,所谓递归就是自己调用自己的一种方法,需要注意递归一定要有个出口,也就是一定要有一个结束递归的条件,否则的话,就会产生思想循环。
function getNum(num){    if(num <1){        return 1;    }else{        return getNum(num-1)*num;    }}

console.log(getNum(3));

以上这个递归就是求得num的阶层 即num!,还有更多递归的方法,需要多多练习。

    //快速排序,利用递归,比较中间值,进行快速排序var arr=[2,31,33,54,65,32];function f1(arr){    if(arr.length<1){        return arr;    }    var midIndex=Math.floor(arr.length/2); //获取中间的索引值    var midNum=arr.splice(midIndex,1)[0]; // 获取中间的数值,取出新的数组后,第0个元素即为数字

    var right=[];    var left=[];    for(var i=0;i<arr.length;i++){        if(arr[i]<midNum){            left.push(arr[i]);        }else{            right.push(arr[i]);        }    }

    return f1(left).concat([midNum],f1(right));}    console.log(f1(arr));
				
时间: 2024-10-06 14:55:15

冒泡排序和简单的递归的相关文章

简单的递归

好久没刷题,现在看到这道简单的递归竟然卡了下=.=!分析问题的思维!! Problem Description 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? Input 输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述. n=0表示输入数据的结束,不做处理. Output 对于每个测试实例,输出在第n年的时候母牛的数量. 每个输出占一行. Sample In

二叉树的前中后序遍历简单的递归

二叉树的遍历 无外乎广度和深度 其中深度又分为前中后序遍历三种情况  这三种遍历若只是递归方法 自然很是简单 但递归代码简单 若嵌套层次太深 会栈溢出 二叉树节点数据结构: struct Binary_node{    int val;    Binary_node *left;    Binary_node *right;    Binary_node(int v = 0, Binary_node *le = nullptr, Binary_node *ri = nullptr) :val(v

冒泡排序与简单选择排序——Java实现

1.冒泡排序 1)原理说明:重复遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 2)代码实现: package com.test.sort; public class BubbleSort { public static void sort(int[] data) { for (int i = 0; i < data.length; i++) { for (int j = data.length

排序(二)__冒泡排序、简单选择排序和直接插入排序

前面<排序(一)__综述>提到按照算法的复杂度分为简单算法和改进算法两大类,本文主要就简单算法中的冒泡排序.简单选择排序和直接插入排序进行通俗详细的解析. 一.冒泡排序 1.基本概念 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止.(动态图来自维基百科) 2.关键代码(优化之后) void BubbleSort(SqList *L) { int i,j; Status flag=TRUE;            //flag用作标记,避

直接插入排序、二分插入排序、希尔排序、冒泡排序与简单选择排序

一.直接插入排序 稳定,时间复杂度:最好O(n).最差O(n^2).平均O(n^2),空间复杂度O(1) void InsertSort(int L[], int n) { int i, j,key; for (i = 1; i<n; i++) if(L[i] < L[i-1])//需要将L[i]插入到有序表L[0...i-1] { key = L[i]; for(j = i-1; j >= 0 && key < L[j]; j--)//后移 L[j+1] = L[

七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)

 写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列.因此排序掌握各种排序算法非常重要.对下面介绍的各个排序,我们假定所有排序的关键字都是整数.对传入函数的参数默认是已经检查好了的.只是简单的描述各个算法并给出了具体实现代码,并未做其他深究探讨. 基础知识: 由于待排序的记录数量不同,使得排序过程中设计的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在计算机随机存储器中进行的排序过程.另一类是外部排序,

排序算法学习之简单排序(冒泡排序,简单选择排序,直接插入排序)

一.冒泡排序 冒泡排序算是最基础的一种算法了,复杂度为O(N^2),其基本思想是:从最低端数据开始,两两相邻比较,如果反序则交换.代码如下: /*最基本的冒泡排序*/ void BubbleSort1 (int n, int *array) /*little > big*/ { int i, j; for (i=0; i<n-1; i++) { for (j=n-1; j>i; j--) { if (array[j] < array[j-1]) { int temp = array

冒泡排序、简单选择排序、直接插入排序

冒泡排序(Bubble Sort)的基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止.时间复杂度为O(n2). 简单选择排序(Simple Selection Sort)的基本思想:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换.应该说,尽管与冒泡排序同为O(n2), 但简单选择排序的性能上还是要略优于冒泡排序. 直接插入排序(Straight Insertion Sort)的基本思想:将一个记录插入到前面已经排序好的有序表中

冒泡排序、简单选择排序

冒泡排序:(如升序) 在第一趟排序中,从第一个元素开始,扫描整个待排序元素序列,若相邻的两个元素逆序,则交换位置.直到最后一个元素,此时,最后一个元素必为最大的元素. 第二趟排序,依然从第一个元素开始扫描直到倒数第二个元素. 第三趟排序,从第一个扫描到倒数第三个. ...... 直到只剩一个元素需要扫描. 程序如下: #include<stdio.h> int main() { int arr[]={1,2,3,9,8,7,5,6,4}; int i=0; int j=0; int len=s