A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小蜀哥哥 黑马粉丝团   /  2019-12-6 18:30  /  1222 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

面试经常遇到这个问题,所以整理下,以便理解。
经常用到的排序方法有两种,冒泡排序和快速排序。
1.先说快速排序
原理:每一次比较相邻两个数的大小,通过第一轮循环排序,找到最大值放到后面,第二轮找到二大值放后面。
代码实现:
[url=][/url]
sort(arr: Array<any>) {        for(let i = 0; i<arr.length;i++) {            for(let j = 0;j<arr.length-i-1;j++){                let tmp = arr[j];                if(arr[j] > arr[j+1]){                    arr[j] = arr[j+1];                    arr[j+1] = tmp;                }            }        }        return arr;    }[url=][/url]

比如说执行[19,49,89,5,8,34,1,5,63]这个数组,经过第一轮循环会把89取出来放在最后面,然后再对前面的数据进行第二轮循环,会拿到63,依次类推。
注:如果需要把数组递减排序,把上面代码中的arr[j]>arr[j+1]改为小于符号即可。

2.冒泡排序
原理:取一个中间值,通过这个之间值和数组中的树相比,比它小的放左边,比它大的放右边,再依次递归左侧和右侧的数组,以此达到排序目的。
代码实现:
[url=][/url]
quickSort(arr:Array<any>):Array<any> {        if( arr.length < 1) {            return  arr;        }        let num = Math.floor(arr.length/2);                let middle = arr.splice(num,1)[0];        let leftArr = [];        let rightArr = [];        for(let i = 0;i < arr.length; i++) {            if (middle > arr) {                leftArr.push(arr);            } else {                rightArr.push(arr);            }        }        return this.quickSort(leftArr).concat([middle],this.quickSort(rightArr));    }[url=][/url]

同理,如果要得到一个递减的数组 把middel>arr中的大于改为小于即可。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马