js面试常考之数组冒泡排序

js的数组排序

给出一个无需的数字数组,让写冒泡排序:

解析:冒泡排序是指由第一项数与第二项的数相比较,第一项大的话两者互换位置,若第二项大的话就位置不变;

   在接着比较第二第三项,比较结果重复上一个步骤;(内for循环)

     第一次比较完后在从第二项开始在按上一环节比较;(外for循环)

只到循环完最后第二项为止;

举例数组 arr = [3,56,4,1,34,78,23,59,66,42];

        //冒泡排序
	function arrSort(arr){
		var len = arr.length;
		for(var i = 0; i <len; i++){ //确定需要循环的次数
			for(var j = 0; j < len-1-i; j++){
				if(arr[j]>arr[j+1]){ //相邻的两项作比较
					var nu = arr[j+1];
					arr[j+1] = arr[j];
					arr[j]= nu;
				}
			}
		}
		console.log(arr);
	}
	arrSort(arr);

 但是这个两个for循环如果数据量大了会相当消耗内存的运算;因为在每次内for循环一次完毕后都以找出一个最大数放在最后的位置,

外循环没粗循环到最后几位都要重新循环,为节省循环次数在每次内for循环最后一次换位置的地方做标记;

 2.改进冒泡排序:

       function arrSort2(arr){
		var i = arr.length-1;
		while (i>0) {
			console.log(i)//这里依次由大到小打出arr的每项数据位置索引(除去第一项0),
			var pos = 0;//每次循环将标记的位置定位0;
			for(var j=0;j<i;j++){
				if(arr[j]>arr[j+1]){
					pos=j;
					var nu = arr[j+1];
					arr[j+1] = arr[j];
					arr[j]= nu;

				  }
			  }
			  i=pos;//最后一个交换的位置;
		 }
		 console.log(arr);
	    }
	    arrSort2(arr);

  节省了一些不必要的循环,提高了运算速度!

时间: 2024-12-15 23:08:14

js面试常考之数组冒泡排序的相关文章

Java面试常考到的东东

1.super与this的区别? super是我们在子类中想使用被子类隐藏的父类的成员变量或方法时,可以使用的关键字. this出现在类的实例方法中,代表使用该方法的当前对象.也可以出现在类的构造方法中,代表使用该构造方法所创建的对象. this()代表当前类对象,super()代表父类对象. 表示在子类访问父类的成员和行为,必须受到类继承规则的约束. 在子类的构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个构造函数被私有化了,此时必须加入

PHP面试常考内容之Memcache和Redis(1)

你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点为以下几点,更新时间为每周一三五,可以关注本栏持续关注,感谢你的支持. 一.什么是Memcache?二.Memcache有什么特征?三.Memcache的内存管理机制是什么样的?四.Memcache和Memcached有什么区别?五.如何操作Memcache?六.如何使用Memcache做Session共享?

计算机网络面试常考总结(二)

目录 简述DNS域名系统及其工作原理. 简述HTTP协议及其工作原理. HTTP报文的格式? HTTP请求报文中的方法有哪些? http1.1和http2.0的区别? http的返回码以及代表的意思? 简述https.https与http的区别? IP数据报格式? TCP数据报格式? UDP数据报格式? 以太网MAC帧格式? 怎么判断两台主机是否连接好? 简述RIP及其工作原理. 简述OSPF及其工作原理. 简述BGP及其工作原理. 写在最前面:本文章所有内容是本人从网络上以及<计算机网络第七版

面试常考数据结构与算法

数据结构部分: 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前无法确定数组的大小,只能够将数组定义成足够大小,这样数组的空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,他采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费. 从逻辑结构上来看

js常考之数组选择排序

选择排序: 两个for循环嵌套,外循环记录每次循环开始的位置,内循环查找本次循环内的最小值: 实质是每循环一次将查到的最小值放在每次循环的最初开始的位置: 代码: //选择排序 function arrSort3(arr){ var len= arr.length, minIndex,nu; for(var i = 0; i < len-1; i++){ minIndex = i;//记录每次循环的第一个数为该次循环的最小值索引 for(var j = i+1; j < len; j++){

[面试常考]排序算法总结

排序在各次面试的过程中问道的次数不少,冒泡排序和快速排序尤多.因此做一些总结,尤其是代码部分. 1. 冒泡排序 (1)思想 在一组数中,对当前未排好序的数,自上而下地对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的数往上冒. (2)复杂度 平均情况-O(n^2) 最坏情况-O(n^2)(逆序有序) 最好情况-O(n)(正序有序) 空间复杂度-O(1) (3)稳定性 稳定 (4)伪码 bubblesort(A) { for i=1 to length[A] // 排序的趟数 { for

面试常考各类排序算法总结.(c#)

一. 面试以及考试过程中必会出现一道排序算法面试题,为了加深对排序算法的理解,在此我对各种排序算法做个总结归纳. 1.冒泡排序算法(BubbleSort) 1 public Class SortDemo 2 { 3 public void BubbleSort(int arr) 4 { 5 int temp=0; 6 //需要走arr.Length-1 趟 7 for(int i=0;i<arr.Length-1;i++) 8 { 9 //每一趟需要比较次数 10 for(int j=0,j<

.NET面试常考算法

1.求质数    质数也成为素数,质数就是这个数除了1和他本身两个因数以外,没有其他因数的数,叫做质数,和他相反的是合数,    就是除了1和他本身两个因数以外,还友其他因数的数叫做合数. 1 namespace ConsoleApp 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 long i; 8 while (true) 9 { 10 Console.Write("请输入要计算的质数(0退出):");

【面试常考】C语言:输入:&quot;student a am i&quot;,输出&quot;i am a student,不能使用库函数

#include<stdio.h> //#include <assert.h> void my_reverse(char *left ,char * right) {  //assert(left);  //assert(right);   用以处理指针函数为空,保证有效  while(left < right)  {   char tmp =  *left;  //借助中间变量实现逆置   *left =  *right;   *right = tmp;   left ++