选择排序和冒泡排序

来源:互联网 发布:建设项目经济评价软件 编辑:程序博客网 时间:2024/06/05 10:25

    之前看算法书的时候对冒泡排序和选择排序有点混淆,它们都是使用双层循环,都存在数据交换.

在阳光明媚的一天,我高高兴兴的打开了我的<<算法图解>>,突然发现大哭选择排序和冒泡排序是

什么鬼,怎么看着都一样,可能是我太久没有用了吧.于是在同学(机油)的怂恿之下,我决定开启我的

博客生活>>>>>>

    废话有点多哦,反正是给别人看的得意,下面我就贴出代码,好好的温习一遍.

①选择排序

for (int i = 0; i < arr.length-1; i++) {                   // i 循环的次数:length-1, 举个栗子: 3,2,1 进行选择排序:                                                                    第一次内层循环结束的结果是: 1,3,2 第二次内层循环结束时结果是: 1,2,3 此时就已经得出正确的排序结果, 无需再进行第三次的内层循环                                              for (int j = i; j < arr.length; j++) {             // 内层循环从i 开始进行比较, 因为 i 之前的元素已经完成了排序if(arr[i] > arr[j]){                       // 此处是选择排序和冒泡排序的核心区别(我是这么认为的-->或者说是我瞎掰的)                              //整个if语句块是为了找出需要排序的元素中的最小值,并进行交换int temp = arr[j];arr[j] = arr[i];arr[i] = temp;}}}

②冒泡排序

  for(int i = 0 ; i < arr.length-1 ; i++){              // 此处和选择排序中的栗子原理相同      for(int j = 0 ; j < arr.length-1-i ; j++){        // -1是防止索引越界(因为内层循环中的if语句块中存在 arr[j+1])  -i是为了提高效率          if(arr[j] >= arr[j+1]){                       // 相邻两个元素之间进行比较     ( 此处是选择排序和冒泡排序的核心区别 )      //if 语句块每次比较的是相邻的两个元素之间的比较,并进行交换             int temp = arr[j];             arr[j] = arr[j+1];             arr[j+1] = temp;          }      }  }

    折腾了这么久,我觉得我已经饿了, 将就着看吧. 要是有错误或者建议大家可以踊跃提出,反正我不会接受的得意.