<!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>
本文分享自 交互设计前端开发与后端程序设计 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!