博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webAssmebly实现js数组排序 使用custom elements和Shadow DOM自定义组件
阅读量:5322 次
发布时间:2019-06-14

本文共 4807 字,大约阅读时间需要 16 分钟。

直接上码了………………

.wat源码

  

(module  (type $t0 (func (param i32 i32)))  (type $t1 (func (result i32)))  (type $t2 (func (param i32 i32 i32 i32)))  (type $t3 (func))  (import "env" "returnArr" (func $env.returnArr (type $t0)))  (func $getArrayOffset (type $t1) (result i32)    i32.const 16)  (func $swap (type $t0) (param $p0 i32) (param $p1 i32)    (local $l0 i32)    get_local $p0    i32.load    set_local $l0    get_local $p0    get_local $p1    i32.load    i32.store    get_local $p1    get_local $l0    i32.store)  (func $mainSrot (type $t2) (param $p0 i32) (param $p1 i32) (param $p2 i32) (param $p3 i32)    (local $l0 i32) (local $l1 i32) (local $l2 i32) (local $l3 i32) (local $l4 i32) (local $l5 i32) (local $l6 i32)    block $B0      get_local $p2      get_local $p3      i32.ge_s      br_if $B0      loop $L1        get_local $p0        get_local $p2        tee_local $l0        i32.const 2        i32.shl        i32.add        tee_local $l1        i32.load        set_local $l4        get_local $p0        get_local $l0        i32.const 1        i32.add        tee_local $l6        i32.const 2        i32.shl        i32.add        tee_local $l2        i32.load        set_local $l5        block $B2          block $B3            get_local $l6            get_local $p3            i32.ge_s            br_if $B3            get_local $p3            set_local $p2            loop $L4              get_local $p0              get_local $p2              i32.const 2              i32.shl              i32.add              set_local $l3              block $B5                loop $L6                  get_local $l5                  get_local $l4                  i32.le_s                  br_if $B5                  get_local $l2                  get_local $l3                  i32.load                  i32.store                  get_local $l3                  get_local $l5                  i32.store                  get_local $l3                  i32.const -4                  i32.add                  set_local $l3                  get_local $l1                  i32.load                  set_local $l4                  get_local $l2                  i32.load                  set_local $l5                  get_local $l6                  get_local $p2                  i32.const -1                  i32.add                  tee_local $p2                  i32.lt_s                  br_if $L6                  br $B2                end              end              get_local $p0              get_local $l6              i32.const 1              i32.add              tee_local $l6              i32.const 2              i32.shl              i32.add              tee_local $l2              i32.load              set_local $l5              get_local $l6              get_local $p2              i32.lt_s              br_if $L4              br $B2            end          end          get_local $p3          set_local $p2        end        get_local $l1        get_local $p0        get_local $l6        get_local $l5        get_local $l4        i32.ge_s        i32.sub        tee_local $l3        i32.const 2        i32.shl        i32.add        tee_local $l5        i32.load        i32.store        get_local $l5        get_local $l4        i32.store        get_local $p0        get_local $p1        get_local $l0        get_local $l3        call $mainSrot        get_local $p2        get_local $p3        i32.lt_s        br_if $L1      end    end)  (func $sort (type $t3)    i32.const 16    i32.const 20    i32.const 0    i32.const 19    call $mainSrot    i32.const 16    i32.const 20    call $env.returnArr)  (table $T0 0 anyfunc)  (memory $memory 1)  (export "memory" (memory 0))  (export "getArrayOffset" (func $getArrayOffset))  (export "swap" (func $swap))  (export "mainSrot" (func $mainSrot))  (export "sort" (func $sort)))

c源码:

#define N 20//外部导入javascript函数extern void returnArr(int * offset, int length);int array[N];//定义数组并且取到数组首地址int * getArrayOffset(){    return array;}//交换2个数的值void swap(int *a , int *b){   int temp;  temp = *a;  *a = *b;  *b = temp;}// 主排序方法void mainSrot(int array[], int maxlen, int begin, int end){  int i,j;  if(begin < end){       i = begin+1;    j = end;        while (i < j){      if(array[i] > array[begin]){          swap(&array[i],&array[j]);          j--;      }else{        i++;      }         }        if(array[i] >= array[begin]){      i--;    }    swap(&array[begin],&array[i]);        mainSrot(array,maxlen,begin,i);    mainSrot(array,maxlen,j,end);      }}//JavaScript调用方法void sort(){  mainSrot(array,N,0,N-1);  //调用JavaScript中的函数  returnArr(array,N);}

html和js源码:

    
Document

输入:

输出:

 

 结束……

转载于:https://www.cnblogs.com/y-y-y-y/p/10301709.html

你可能感兴趣的文章
菜菜鸟日记之多线程()
查看>>
解决粘贴中文字符串乱码问题
查看>>
加载:Android Activity加载完成事件
查看>>
Ubuntu12.04 MySQL服务器乱码问题的解决办法
查看>>
asp.net mvc 依赖注入Ninject
查看>>
[LeetCode OJ] Candy
查看>>
Ext.encode 抛出异常“Uncaught RangeError: Maximum call stack size exceeded”
查看>>
systemctl用法及其语法
查看>>
HTTP和HTTPS区别
查看>>
微信40029 code解决办法
查看>>
Eclipse的下载及安装
查看>>
《Effective C#》读书笔记——条目3:推荐使用is或as而不是强制转换类型<C#语言习惯>...
查看>>
开发积累—泛型工具类
查看>>
iOS项目开发实战——制作视图的缩放动画
查看>>
关于在jquery动态修改css,html中,mouseenter,mouseleave,click等方法失效的处理
查看>>
[翻译] java NIO 教程---介绍
查看>>
Java开发小技巧(一)
查看>>
第二天简书
查看>>
iptables 用法
查看>>
MySQL的多表查询(笛卡尔积原理)
查看>>