美文网首页
面试必会算法

面试必会算法

作者: _Sisyphus | 来源:发表于2018-09-09 18:17 被阅读0次

    冒泡排序(Bubble Sort)

    核心思想:

    相邻元素两两比较,大的往后放,第一次比较完毕后,最大值出现在最大索引处.

    规律:

    1. 两两比较,大的往后放(内循环内代码块)
    2. 每一次比较完毕后,下一次比较减少一个元素的比较(j < arr.length - 1 - i)
        第一次比完后,最后一个数一定是数组中最大的一个数,所以第二次比较时最后一个数不参与比较;
        第二次比完后,倒数第二个数也一定是数组中第二大的数,所以第三次比较时最后两个数不参与比较;
        ...
    3. 第一次比较,0个元素不比(j < arr.length - 1 - i)
       第二次比较,1个元素不比
       第三次比较,2个元素不比
       ...
    4. 总共比较数据长度 -1 次(外层循环控制)
    

    代码:

    int[] arr = {5, 8, 2, 9, 1};  
    
    //外层控制循环次数
    for (int x = 0; x < arr.length - 1; x++) {
        for (int y = 0; y < arr.length - 1 - x; y++) {  //内层循环控制每次比较多少个元素(每一次比较完,下一次减少一个元素的比较)
            if (arr[y] > arr[y + 1]) {
                int temp = arr[y];
                arr[y] = arr[y + 1];
                arr[y + 1] = temp;
            }
        }
    }
    

    图解:

    冒泡排序

    选择排序(Select Sort)

    核心思想:

    从 0 索引开始,依次和后面每个元素比较,小的放入前面,第一次比完组小值出现在最小索引处

    规律:

    1.第一次是从 0 索引处开始依次和后面每个元素比较
      第二次是从 1 索引处开始一次和后面每个元素比较
      ...
    2.最后一次是数组长度 -2 索引的元素和数组长度 -1 索引的元素比较(也就是最后两个,所以比较的次数也是长度 -1 次)  
    

    代码:

     int[] arr = {5, 8, 2, 9, 1};  
    
    for (int x = 0; x < arr.length - 1; x++) {
        for (int y = x + 1; y < arr.length; y++) {
            if (arr[y] < arr[x]) {
                int temp = arr[y];
                arr[y] = arr[x];
                arr[x] = temp;
            }
        }
    }
    

    图解:

    选择排序

    相关文章

      网友评论

          本文标题:面试必会算法

          本文链接:https://www.haomeiwen.com/subject/evsdgftx.html