经典冒泡排序-由低到高
冒泡排序:
據(jù)說是八大排序中的其一,通俗的意思就是講,在一組數(shù)據(jù)中,相鄰元素依次比較大小,最大的放后面,最小的冒上來
我這里簡單畫了一個圖,不算流程,但里面有分析過程
1、確定第1個數(shù)的位置:依次與其它數(shù)據(jù)相比:
--第1次和2相比,比2大,則右移1位到2的位置上, 這時候,1在2位置上了
--再與3相比,如果比3大,再向右移1位到3的位置上,不大則不用移動,這時候1在3位置上
--再與4相比,如果比4大,再向右移動1位到4的位置上,不大則不用移動,這時候1在4位置上
--再與5相比,如果比5大,再向右移動1位到5的位置上,不大則不用移動,這時候1在5位置上
經(jīng)過以上一輪4次的比較,我們可以確定1的位置。
下圖是流程圖:
2、確定第2個數(shù)的位置:依次與除1以外的其它數(shù)據(jù)相比(因為第1輪比較1的時候,已經(jīng)比過了,已經(jīng)確定了1的位置,所以這以后都沒必要再跟1比了):
--第1次和3相比,比3大,則右移1位到3的位置上, 這時候,2在3位置上了,不大則不用移動
--再與4相比,如果比4大,再向右移1位到4的位置上,這時候2在4位置上,不大則不用移動
--再與5相比,如果比5大,再向右移動1位到5的位置上,這時候1在5位置上,不大則不用移動
經(jīng)過以上一輪3次的比較,我們可以確定2的位置。
?
3、確定第3個數(shù)的位置:依次與除1、2以外的其它數(shù)據(jù)相比(因為第1輪、第2輪比較1、2的時候,已經(jīng)比過了,已經(jīng)確定了1、2的位置,所以這以后都沒必要再跟1、2比了):
--第1次和4相比,比4大,則右移1位到4的位置上, 這時候,3在4位置上了,不大則不用移動
--再與5相比,如果比5大,再向右移1位到5的位置上,這時候2在5位置上,不大則不用移動
經(jīng)過以上一輪2次的比較,我們可以確定3的位置。
?
4、確定第4個數(shù)的位置:依次與除1、2、3以外的其它數(shù)據(jù)相比(因為第1輪、第2輪、第3輪比較1、2、3的時候,已經(jīng)比過了,已經(jīng)確定了1、2、3的位置,所以這以后都沒必要再跟1、2、3比了):
--第1次和5相比,比5大,則右移1位到5的位置上, 這時候,4在5位置上了,不大則不用移動
經(jīng)過以上一輪1次的比較,我們可以確定4的位置。
?
5、最后的5不用再比較了,因為已經(jīng)確定了其它剩下的位置,第一輪都有與5比較過,所以其它4個坑占了后,剩下的5你還有啥選擇呢。已經(jīng)被固定了
?
以上我只過第1輪的時候的圖,讓大家能了解一下站隊的一個大體情況,近而來分析,那么接下來,我們來分析一下,如何用程序?qū)崿F(xiàn)這個邏輯:
1、首先我們就定5個數(shù)吧,那么我們可以把這5個數(shù)放在一個數(shù)組里。int[] nums={23,12,34,2,67}或int[] nums=new int[]{23,12,34,2,67},這里怎么用:開心就好!
2、要進行4輪的比較才能確定,這一定是個循環(huán),固定次數(shù)的,我們用for吧。for(int i=0;i<4;i++),當(dāng)然你用for(int i=1;i<=4;i++)也行,不過數(shù)組是從0開始的,所以習(xí)慣i從0開始,這樣也有利于看直接:數(shù)組[i],不然還每次得:數(shù)組[i-1]。4也就是:數(shù)組.length-1
3、每一輪里面要循環(huán)不同次數(shù)比較數(shù)據(jù)確定位置,那么在第2步循環(huán)中,要再有一個循環(huán),這是多重循環(huán),也叫潛逃循環(huán)
這個for循環(huán),我們也要來分析一下,它的范圍:
第幾輪(我們定的是變量i) ?????? ? ? (內(nèi)層循環(huán))次 變量j
????????????? 1????? 對應(yīng)數(shù)組下標i是0 ?? 4??????? 外層循環(huán)第1次,內(nèi)層需要循環(huán)4次 =5-i-1
2????? 對應(yīng)數(shù)組下標i是1 ?3??????? 外層循環(huán)第2次,內(nèi)層需要循環(huán)3次? =5-i-1
? 3????? 對應(yīng)數(shù)組下標i是2 ?? 2??????? 外層循環(huán)第3次,內(nèi)層需要循環(huán)2次? =5-i-1
4????? 對應(yīng)數(shù)組下標i是3 ? 1??????? 外層循環(huán)第4次,內(nèi)層需要循環(huán)1次? =5-i-1
內(nèi)層for循環(huán),我們設(shè)置變量j,for(int j=0;j< ;j++),j<這個值,要找出來
雙重循環(huán)的原理是:外層循環(huán)1次,內(nèi)層循環(huán)1輪(遍歷),上表已經(jīng)很清晰的標示出了j每輪循環(huán)里面要執(zhí)行的次數(shù),但因為我們是i是從0開始的,所以j的范圍應(yīng)該是5-i-1,也就是:數(shù)組.length-1-i
4、在內(nèi)層循環(huán)中還有一個條件,即前一位比后一位大的話,進行挪位,不大則不變位置,如果涉及挪位的時候,我們需要一個變量來倒騰一下交換要挪位的2個值。
通過以上分析:啊,恍然大悟~~~
package com.cn.u4;/*** @author Administrator冒泡排序,升序*/ public class SortNum {public static void main(String[] args) {//定義數(shù)組,我這里用簡單的語法定義int[] nums={23,12,34,2,67};//進行幾輪比較,確定幾個位置for(int i=0;i<nums.length-1;i++){for(int j=0;j<nums.length-1-i;j++){if(nums[j]>nums[j+1]){int tmp=nums[j+1];nums[j+1]=nums[j];nums[j]=tmp;}}System.out.print("第"+(i+1)+"次排序后的結(jié)果:");
?? ??? ??? ? for(int k=0;k<nums.length;k++){
?? ??? ??? ??? ? System.out.print(nums[k]+" ");
?? ??? ??? ? }System.out.println("");}System.out.println("冒泡后的數(shù)組=");for(int num:nums){System.out.print(num+" ");}} }
?結(jié)果輸出:
這個東西,我糾結(jié)了三天,今天五一,出去看樓去了,參觀了別人家的山體別野,尼瑪,回來就開竅了??偨Y(jié):人生,需要刺激!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的经典冒泡排序-由低到高的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows CMD.exe下写路径
- 下一篇: sesearch