冒泡排序原理解析

<span style="font-size:14px;">冒泡排序:让数组中的数据两两进行比较(第 i 个和第(i+1)个进行比较,经过(N-1)次两两比较得到我们需要的拍好序的数据。</span>
<span style="font-size:14px;">{33,20,10,14,16,11,28}原始个数7个,按照从大到小进行冒泡排序。</span>
<span style="font-size:18px;">第一次比较过程:33和20比较:33>20  <span style="white-space:pre">	</span>不交换位置  <span style="white-space:pre">	</span>→{<span style="background-color: rgb(255, 0, 0);">33,20</span>,10,14,16,11,28};</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span>20和10比较:22>10 <span style="white-space:pre">	</span>不交换位置<span style="white-space:pre">	</span>→{33,<span style="background-color: rgb(255, 0, 0);">20,10</span>,14,16,11,28};</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span>10和14比较:10<14<span style="white-space:pre">	</span>交换位置<span style="white-space:pre">	</span>→{33,20,<span style="background-color: rgb(255, 0, 0);">14,10</span>,16,11,28};</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span>10和16比较:10<16<span style="white-space:pre">	</span>交换位置<span style="white-space:pre">	</span>→{33,20,14,<span style="background-color: rgb(255, 0, 0);">16,10</span>,11,28};</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span>10和11比较:10<11<span style="white-space:pre">	</span>交换位置<span style="white-space:pre">	</span>→{33,20,14,16,<span style="background-color: rgb(255, 0, 0);">11,10</span>,28};</span>
<span style="font-size:18px;"><span style="white-space:pre">		</span>10和28比较:10<,28<span style="white-space:pre">	</span>交换位置<span style="white-space:pre">	</span>→{33,20,14,16,11,<span style="background-color: rgb(255, 0, 0);">28,10</span>};</span>
<span style="font-size:18px;">第一轮比较结果:{33,20,14,16,11,28,10}; <span style="white-space:pre">	</span>两两比较次数:6次;</span>
<span style="font-family: Arial, Helvetica, sans-serif;">由比较过程可以看出最后一位一定是最小的一位,所以第二次比较可以排除最后一位,只需要比较前6位{33,20,14,16,11,28};</span>
<span style="font-size:18px;">第二轮比较结果:{33,20,16,14,28,11,10}; <span style="white-space:pre">	</span>两两比较次数:5次;</span>
<span style="font-size:18px;">第三轮比较结果:{33,20,16,28,14,11,10};<span style="white-space:pre">	</span>两两比较次数:4次;</span>
<span style="font-size:18px;">第四轮比较结果:{33,20,28,16,14,11,10};<span style="white-space:pre">	</span>两两比较次数:3次;</span>
<span style="font-size:18px;">第五轮比较结果:{33,20,28,16,14,11,10};<span style="white-space:pre">	</span>两两比较次数:2次;</span>
<span style="font-size:18px;">第六轮比较结果:{33,20,28,16,14,11,10};<span style="white-space:pre">	</span>两两比较次数:1次;</span>
<strong><span style="font-size:18px;color:#ff0000;">由上面可以看出两两比较的次数会随着比较轮数已(比较次数 = 原始个数 - 比较轮数)的规律减少,比较的轮数 = 原始个数 -1;</span></strong>
<strong><span style="font-size:18px;color:#ff0000;">这样我们就可以推出:当数组长度为 N 时与比较的轮数 M 的关系为:M=N-1;</span></strong>
<strong><span style="font-size:18px;color:#ff0000;"><span style="white-space:pre">			</span>  比较轮数M和两两比较次数 K 的关系为:K=N-M;</span></strong>
我们已经分析出来了数组长度和比较轮数,两两比较次数之间的关系,试着将这些关系用代码表示出来;
首先是数组长度为 N 时与比较的轮数 M :M=N-1 的关系的转换;
<span style="font-size:24px;">for (int M = 0; M < N.Length-1; M++)           </span>
<span style="font-size:24px;">{	</span>
<span style="font-size:24px;"><span style="white-space:pre">	</span><span style="color:#ff0000;">比较轮数M和两两比较次数 K 的关系为:K=N-M;</span></span>
<span style="font-size:24px;"><span style="color:#ff0000;"><span style="white-space: pre;">	</span>因为程序里面M=0表示第一轮循环,所以:K=N-M-1;</span>
</span>
<span style="font-size:24px;"><span style="white-space:pre">	</span>for (int k = 0; k < N.Length-M-1; k++)
        {
                 <span style="color:#ff0000;">在里面将相邻的值进行比较,然后调换位置。</span></span>
<span style="font-size:24px;color:#ff0000;"><span style="white-space:pre">				</span> 从小到大排序用 > 符号;</span>
<span style="font-size:24px;color:#ff0000;"><span style="white-space:pre">				</span> 从大到小排序用 < 符号。</span>
<span style="font-size:24px;"><span style="white-space:pre">		</span>if(N[K]<N[K+1])</span>
<span style="font-size:24px;"><span style="white-space:pre">		</span>{</span>
<span style="font-size:24px;"><span style="white-space:pre">			</span>N[K]=N[k]+N[K+1];</span>
<span style="font-size:24px;"><span style="white-space:pre">			</span>N[K+1]=N[K]-N[K+1];</span>
<span style="font-size:24px;"><span style="white-space:pre">			</span>N[K]=N[K]-N[K+1];</span>
<span style="font-size:24px;"><span style="white-space:pre">		</span>}
            }</span>
<span style="font-size:24px;">}</span>

 
这样冒泡排序的结构已经出来了。 





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值