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赋值,并没有发生数据交换,消耗可以忽略
以上仅为我个人观点,如果你有你的想法,请一定提出来,谢谢