常用算法比较,js实现
时间:2022-05-06
本文章向大家介绍常用算法比较,js实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
body{
width: 100%;
background: gainsboro;
height: auto;
word-break: break-all;
}
</style>
</head>
<body >
<div id="arr_pro">
</div>
</body>
</html>
<script>
//从小到大
//--------------------------
function bubble_sort1(arr){
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length;j++){
if(arr[j]>=arr[i]){
var temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
return arr;
}
//=============================
function bubble_sort2(arr){
for(var i=0;i<arr.length;i++){
for(var j=i;j<arr.length;j++){
if(arr[j]<=arr[i]){
var temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
return arr;
}
//==============================
function merge(left, right){//归并操作
var result=[];
while(left.length>0 && right.length>0){//把左、右两边的数组排好
if(left[0]<right[0]){//都是把小的放在排好的数组前面
result.push(left.shift());
}else{
result.push(right.shift());
}
}
//console.log(result);
return result.concat(left).concat(right);//最后把排好的数组连接起来
}
function merge_sort(items){
if(items.length == 1){//当数组无法再细分,就结束
return items;
}
var middle = Math.floor(items.length/2),
left = items.slice(0, middle),//从中间切开,得到左边的数组
right = items.slice(middle);//得到右边的数组
return merge(merge_sort(left), merge_sort(right));//递归的细分,直到细分为1
}
//================================
function select_sort(arr){
var new_arr=[];
for(var m=0;m<arr.length;m++){
var temp=null;
var min=arr[m];//假设这个最小
for(var i=m;i<arr.length;i++){
if(arr[i]<min){//如果有比这个假想最小的数,还小,就交换一下
temp=min;
min=arr[i];
arr[i]=temp;
}
}
//console.log(min);//循环结束,得到最小的数
new_arr.push(min);//把这个最小的数放在新的数组中
//又去拿最小的数
}
return new_arr;
}
//==============================
function quickSort(arr){
var low=0, high=arr.length-1;
sort(low,high);
function sort(low, high){
if(low<high){
var mid = (function(low, high){
var tmp = arr[low];
while(low<high){
while(low<high&&arr[high]>=tmp){
high--;
}
arr[low] = arr[high];
while(low<high&&arr[low]<=tmp){
low++;
}
arr[high] = arr[low];
}
arr[low] = tmp;
return low;
})(low, high);
sort(low, mid-1);
sort(mid+1,high);
}
}
return arr;
}
//==============================
function xier_sort(arr){
//先要确定一个增量,其实确定这个增量还是有技巧的,可以增加排序效率,下面并没有用什么技巧,只是普通的取法,
for(var group = parseInt(arr.length/2);group>0;group=parseInt(group/2)){//每循环一次,需要减小增量,要保持增量为整数
for (var i = group; i < arr.length; i++){//然后就以这个增量去排序
for (var j = i - group; j >= 0; j -= group){
if (arr[j] > arr[j + group]){//发现小的,就往前面交换,这个两个相互交换的数,相距增量这么远。要知道这个增量每次循环都在减小,最后就变成相邻了
var temp = arr[j];
arr[j] = arr[j + group];
arr[j + group] = temp;
}
}
}
}
return arr;
}
//========================================
function insert_sort(arr){
for(var i=1;i<arr.length;i++){//第0个不用管,从第一个开始插入排序
if(arr[i]<=arr[i-1]){//如果后一个小:则要移动到前面去
var j=i-1;
var x=arr[i];//把小的的保存一下,还要与前面已经排好数的进行比,如果大,还要前移
arr[i]=arr[i-1];//把大的往后移
while(x<=arr[j]){//如果已经排好的数组最后一位,大于保存的那个小的,就要后移
arr[j+1]=arr[j];//上面保存的,只要他还大,就前移
j--;
}
arr[j+1]=x;//把这个大的数给这个前面排好的部分最后一位
}
};
return arr;
}
//=============================/
function create_arr(length_arr){
var arr=[];
for(var i=0;i<length_arr;i++){
arr.push(parseInt(Math.random()*length_arr));
};
return arr;
}
var new_arr=create_arr(5000000);
var time1=new Date().getTime();
//冒泡排序
//arr_pro.innerHTML=bubble_sort2(new_arr);
//选择排序
//arr_pro.innerHTML=select_sort(new_arr);
//希尔排序
//arr_pro.innerHTML=xier_sort(new_arr);
//插入排序
//arr_pro.innerHTML=insert_sort(new_arr);
//归并排序
//arr_pro.innerHTML=merge_sort(new_arr);
//快速排序
arr_pro.innerHTML=quickSort(new_arr);
var time2=new Date().getTime();
var run_time=(time2-time1)/1000;
console.log(run_time);
</script>
- WCF系列教程之WCF服务宿主与WCF服务部署
- Hello World · GitHub 指南
- React Native的Navigator详解
- WCF系列教程之WCF服务配置工具
- iOS使用自签名证书实现HTTPS请求
- 敲开 GitHub 的大门 · 注册账号
- 机器学习
- GitHub 主页介绍及修改个人信息
- React Native如何消除启动时白屏
- Observer观察者设计模式
- 创建 GitHub 仓库的步骤及方法
- React Native和原生app通信机制详解
- Python高效编程技巧
- 模块和处理程序之通过HttpModule和HttpHandler拦截入站HTTP请求执行指定托管代码模块
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ThinkPHP5.0框架实现切换数据库的方法分析
- php微信公众号开发之微信企业付款给个人
- tp5框架的增删改查操作示例
- PHP使用函数用法详解
- 微信企业转账之入口类分装php代码
- 多个Laravel项目怎么共用migrations详解
- layui数据表格自定义每页条数limit设置
- Laravel 集成微信用户登录和绑定的实现
- PHP实现微信对账单处理
- Laravel5.1框架路由分组用法实例分析
- PHP的HTTP客户端Guzzle简单使用方法分析
- laravel 框架实现无限级分类的方法示例
- 详解Laravel5.6通过路由进行API版本控制的简单方法
- php+layui数据表格实现数据分页渲染代码
- thinkPHP框架乐观锁和悲观锁实例分析