java-冒泡排序和選擇排序的分析

兩種排序方式

現在介紹兩種著名的排序方式:

1,       冒泡排序:相鄰元素進行比較,較大的往右邊移動:結果就是每一次排序,最大的都會移動到右邊。最後結果就是升序的序列。

如:3,4,2,6,7

第一輪:1,3<4  不變  3,4,2,6,7

               2,4>2  交換位置 3,2,4,6,7

               3,4<6  不變    3,2,4,6,7

               4,6<7  不變 3,2,4,6,7

第二輪:1,3>2  交換位置  2,3,4,6,7

        2,3<4   不變

               3.  4<6   不變

.。。。

轉換成一般性規律,每一輪比較最大值就會移動到最右邊來,一共會比較個數-1次。

用代碼實現的話:

            for(int i=0;i<a.length-1;i++){

      for(int j=0;j<a.length-1-i;j++){

         if(a[j]>a[j+1]){

            int temp;

            temp =a[j];

            a[j]=a[j+1];

            a[j+1]=temp;}}}

   外層的i循環表示的循環次數,內循環表示每一輪循環的狀況,變化在於j<a.length-1-i,因爲每一輪循環後,都會排出一個最大值,那個不用再進行比較,所以減去循環的次數。

2,選擇排序:有一個數組a[i]的話,選擇排序就是a[0]和後面的元素依次比較,接着a[1]和後面的元素一次比較

例:a[]={7,3,2,8,6,4}

第一輪:1,7>3,交換,3,7,2,8,6,4

       2, 3>2,交換,2,7,3,8,6,4

       3,3<8,3<6,3<4後面三步都是小於,所以不變。

   第一輪結果:2,7,3,8,6,4

第二輪:1,7>3,交換,2,3,7,8,6,4

       2,3<7,3<8,3<6,3<4.後面四部都是小於,所以不變

    第二輪結果:2,3,7,8,6,4

第三輪:1,7<8 不變

       2,7>6,交換,2,3,6,8,7,4

       3,6>4,交換,2,3,4,8,7,6

第四輪1,8>7,交換,2,3,4,7,8,6

     2,7>6,交換,2,3,4,6,8,7

第五輪1,8>7,交換,2,3,4,6,7,8

上述過程,說明選擇排序,每一輪都是把最小值選出放在左邊,經過元素個數-1論比較。

源碼:

for(int i=0;i<a.length-1;i++){

      for(int j=i+1;j<a.length;j++){

         if(a[i]>a[j]){

            int temp;

            temp =a[i];

            a[i]=a[j];

            a[j]=temp;}}}

外層循環i,是表示循環的次數,內存是比較的邏輯,需要注意的是:初始值j=i+1,是因爲,在一輪比較中a[i]是固定不變的,只需要下標i比較後面的值,而限定條件j<a.length的原因,每一回都取到的最右邊的值,也就是a[a.length-1]。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章