面试必会算法

冒泡排序(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;
        }
    }
}

图解:

面试必会算法_第1张图片
冒泡排序

选择排序(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;
        }
    }
}

图解:

面试必会算法_第2张图片
选择排序

你可能感兴趣的:(面试必会算法)