java基础之冒泡排序和选择排序

无语,第一次在博客园发表文章,最后只显示标题,却没有内容,火大,这次在随笔写下看看

先看代码

冒泡排序

 1 package PaiXu;
 2 public class MaoPao
 3 {
 4     public static void main(String args[])
 5     {
 6        int MaoPaoArray[] = {8,12,32,2,45,21,65,10,49};
 7         int temp;
 8         for(int i=0;i<MaoPaoArray.length;i++)
 9         {
10             for(int j=i;j<MaoPaoArray.length;j++)     
11               if(MaoPaoArray[j]<MaoPaoArray[i])
12               {
13                  temp = MaoPaoArray[i];
14                  MaoPaoArray[i] = MaoPaoArray[j];
15                  MaoPaoArray[j] = temp;
16               }
17         }
18         for(int i=0;i<MaoPaoArray.length;i++)System.out.print(MaoPaoArray[i]+" ");
19     }    
20 }

选择排序

 1 package PaiXu;
 2 public class XuanZe
 3 {
 4    public static void main(String args[])
 5    {
 6        int XuanZeArray[] = {8,12,32,2,45,21,65,10,49};
 7        int m,index,temp;
 8        for(int i=0;i<XuanZeArray.length;i++)
 9        {
10            index=i;
11            m=XuanZeArray[i];
12            for(int j=i;j<XuanZeArray.length;j++)     
13              if(XuanZeArray[j]<m)
14              {
15                  index = j;
16                  m = XuanZeArray[j];
17              }
18            temp=XuanZeArray[i];
19            XuanZeArray[i]=XuanZeArray[index];
20            XuanZeArray[index]=temp;
21        }
22        for(int i=0;i<XuanZeArray.length;i++)System.out.print(XuanZeArray[i]+" ");
23    }
24 }

代码很简短就不解释了

冒泡排序的步骤: tag:将第i个元素和后面的每个元素逐个比较,如果遇到比Ai小的就交换

1.①比较第一个元素A1和第二个元素A2,如果A2<A1就交换A1和A2的位置

   ②比较第一个元素A1和第三个元素A3,如果A3<A1就交换A1和A3的位置

   ③比较第一个元素A1和第四个元素A4,如果A4<A1就交换A1和A4的位置

...

2.①比较第二个元素A2和第三个元素A3,如果A3<A2就交换A2和A3的位置

   ②比较第二个元素A2和第四个元素A4,如果A4<A2就交换A2和A4的位置

   ③比较第二个元素A2和第五个元素A5,如果A5<A2就交换A2和A5的位置

...

3.①比较第三个元素A3和第四个元素A4,如果A4<A3就交换A3和A4的位置

   ②比较第四个元素A3和第五个元素A5,如果A5<A3就交换A3和A5的位置

   ③比较第五个元素A3和第六个元素A6,如果A6<A3就交换A3和A6的位置

...

...

选择排序法步骤   tag:先找出第i个元素Ai后面的所有元素中最小的那个元素Am,然后比较Am和Ai,如果Am小就交换

1.找出除去第一个元素A1之外的最小的元素Ax,比较Ax和A1,如果Ax小就交换

2.找出除去第一个第二个元素A1、A2之外的最小的元素Ay,比较Ay和A2,如果Ay小就交换

3.找出除去第一个第二个第三个元素A1、A2、A3之外的最小的元素Az,比较Az和A3,如果Az小就交换

...

其实冒泡排序和选择排序的循环次数是一样的,但是通常情况下选择排序法要比冒泡排序法快,这是为什么呢

答案是这样的:选择排序法的数据交换次数要比冒泡排序法少

我来按照最糟糕的情况(完全倒序)算一下

冒泡排序

1.n-1次交换

2.n-2次交换

3.n-3次交换

...

总共是 n(n-1)/2 次交换

选择排序

1.1次交换

2.1次交换

3.1次交换

...

总共是 n 次交换

应该很明显了吧

也许有一些喜欢思考的同学会想:但是选择排序法为了找第i个元素Ai后面的所有元素中最小的那个元素Am也会消耗

没错,但是这里只是给index和m赋值,并没有发生数据交换,消耗可以忽略

以上仅为我个人观点,如果你有你的想法,请一定提出来,谢谢

原文地址:https://www.cnblogs.com/datougui/p/Java_PaiXu.html