内容字号: 默认 大号 超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到宋体切换到微软雅黑

js递归思想做的数组快速排序法:QuickSort()函数方法

发布:2017-06-23 浏览: 评论(
function QuickSort(arr,leftIndex,rightIndex,sort){//从小到大排序
	//这个是用递归思想做的一个数组排序,//比较适合高配置硬件,因为比较耗内存,优点是速度极快,适合大数据运算
	//arr是将要排序的数组
	//leftIndex 要排序数组第一个下标,一般都是0;
	//rightIndex 要排序数组的最后一个下标,一般都是arr.length-1,
	//rightIndex也可以是小于数组总长度的数字,这样将只进行这一部分数的排序
	//sort决定数组是按逆序还是顺序排序,默认是true顺序,如果填false则按逆序排序
	/*
	 *用法:
	  		var arr=[1,-1,20,0,0,-2,20,-3,-90,10,54,0,1,2,3,5,-1,10];
			QuickSort(arr,0,arr.length-1);
			console.log(arr);//[-90, -3, -2, -1, -1, 0, 0, 0, 1, 1, 2, 3, 5, 10, 10, 20, 20, 54]
	
	 * */
	if(!(arr instanceof Array)){
		console.log("arr不是一个数组!");
		return;
	}
	if((typeof leftIndex!='number')||(typeof rightIndex!='number')){
		console.log("leftIndex或rightIndex不是一个数字!")
		return;
	}
	var l=leftIndex;
	var r=rightIndex;
	var pivot=arr[parseInt((leftIndex+rightIndex)/2)];//找中间值
	var temp=0;
	var flag=true;
	while(l < r){
		if( sort == undefined ||sort == true ){//顺序
			while(arr[l] < pivot) l++;
			while(arr[r] > pivot) r--;//走位
		}else if( sort != undefined && sort==false ){//逆序
			while(arr[l] > pivot) l++;
			while(arr[r] < pivot) r--;//走位
		}else{
			flag=false;
			console.log("sort值非法,数组未排序!");
			break;
		}
		if(l >= r) break;
		temp=arr[l];
		arr[l]=arr[r];
		arr[r]=temp;
		if(arr[l] == pivot) --r;
		if(arr[r] == pivot) ++l;//交换完l和r分别走过中间线
	}
	if(flag){
		if(l == r){
			l++;
			r--;
		}
		if(leftIndex < r) QuickSort(arr,leftIndex,r,sort);
		if(rightIndex > l) QuickSort(arr,l,rightIndex,sort);
	}
}
前端新手交流群
欢迎加入web前端新手交流qq群:734802480

更多文章

相关文章

评论

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。


Copyright © 2014-2019 seozhijia.net 版权所有-粤ICP备13087626号-4