一個小案例搞清楚Arrays.sort實現原理

小數組Arrays.sort採用的二分法比較來排序的

參考 https://www.cnblogs.com/hejiayang/p/14119741.html

<p>原數據40,100,1,5,25,10,200</p>
<p>第一次(100-40)比較結果 100,原來無有序排序,直接取第2個和第1個比較即100-40 產生排序100</p>
<p>第二次(1-100)比較結果 暫時不變,已有排序 100,取已有排序中間值(中間的小值)即100 比較 1-100,排序不變 100</p>
<p>第三次(1-40)比較結果 100,40,1,繼續比較 當前(1)和上一個比較(40)比較 1-400 產生排序 100,40,1</p>
<p>第四次(5-40)比較結果 100,40,1,已有排序 100,40,1,取中間值即40 比較 5-40 ,排序不變 </p>
<p>第五次(5-1)比較結果 100,40,5,1,繼續上次比較,去已有排序的後半部分(已有排序100,40,1)中1,比較 5-1 產生排序 100,40,5,1</p>
<p>第六次(25-5)比較結果 100,40,5,1,已有排序100,40,5,1,取已有排序中間值(中間的小值)即(40,5)中小值5,比較 25-5,排序無法確定</p>
<p>第七次(25-40)比較結果 100,40,25,5,1,繼續上次比較,取已有排序的前半部分(已有排序100,40,5,1)中(100,40)(中間的小值)即40,比較25-40 產生排序100,40,25,5,1</p>
<p>第八次(10-25)比較結果 100,40,25,5,1,已有排序100,40,25,5,1取已有排序中間值(中間的小值)即25,比較 10-25</p>
<p>第九次(10-1)比較結果 100,40,25,5,1,繼續上次比較,取已有排序的後半部分(已有排序100,40,25,5,1)中(5,1),取(5,1)中間值(中間的小值)即1</p>
<p>第十次(10-5)比較結果 100,40,25,10,5,1,繼續上次比較,取剩餘(5,1)前半部分(5),比較10-5 產生排序 100,40,25,10,5,1</p>
<p>第十一次(200-10)比較結果 100,40,25,10,5,1,已有排序100,40,25,10,5,1,取已有排序中間值(25,10)(中間的小值)即10,比較200-10</p>
<p>第十二次(200-40)比較結果 100,40,25,10,5,1,繼續上次比較,取已有排序的前半部分(已有排序100,40,25,10,5,1)中(100,40,25)(中間的小值)即25,比較200-40</p>
<p>第十三次(200-100)比較結果 200,100,40,25,10,5,1,繼續上次比較,取(100,40,25)的前半部分中即100,比較200-100,產生排序200,100,40,25,10,5,1</p>
<p id="demo">单击按钮降序排列数组。</p>
<button onclick="myFunction()">点我</button>
<script>
function myFunction(){
	var points = [40,100,1,5,25,10,200];
	points.sort(function(a,b){
	console.log(a,b);
	return b-a});
	var x=document.getElementById("demo");
	x.innerHTML=points;
}
</script>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值