zoukankan      html  css  js  c++  java
  • 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赋值,并没有发生数据交换,消耗可以忽略

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

  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/datougui/p/Java_PaiXu.html
Copyright © 2011-2022 走看看