图解数组高级冒泡排序和选择排序

一、数组高级冒泡排序

  • 需求: 对数组元素:{24, 69, 80, 57, 13}进行冒泡排序

  • 分析: 相邻元素两两比较,大的往后放,第一次完毕最大值出现在了最大索引处。
    第一次比较arr[0]和arr[1]、arr[1]和arr[2]、arr[2]和arr[3]、arr[3]和arr[4];比较4次,得出最大数80
    第二次比较arr[0]和arr[1]、arr[1]和arr[2]、arr[2]和arr[3];比较3次,得出最大数69
    第三次比较arr[0]和arr[1]、arr[1]和arr[2];比较2次,得出最大数57
    第四次比较arr[0]和arr[1];得出最大值24,比较1次,比较完成
    通过这分析我们可以知道5个数只需要比较4次,所以外层需要通过一个for循环去控制,循环的次数就是arr.length-1。总共我们需要比较四大次,但是在第一大次中,还需要比较四小次。然后第二大次中,还需要比较三小次,依次类推,我们可以得到一个规律,只要分析出思路,接下来的代码是容易实现的了。

  • 图解


    image.png
  • 运行结果


    image.png
  • 代码(完整)

package algorithm;

/**
 * Project:Kotlin
 * Package:algorithm
 * Author:SKFsky
 * Description: 排序,冒泡排序和选择排序及二分查找
 */
public class algorithm_sort {
    public static void main(String[] args) {
       demo1()//冒泡排序
       //demo2();//选择排序
    }

    public static void demo1(){
        int[] arr = {24, 69, 80, 57, 13};
        int temp = 0;
        for (int i = 0;iarr[j+1]){
                    temp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        for (int i = 0;i

二、数组高级选择排序

  • 需求: 对数组元素:{24, 69, 80, 57, 13}进行选择排序

  • 分析:
    第一次arr[0]和arr[1],arr[0]和arr[2],arr[0]和arr[3],arr[0]和arr[4],比较四次,求出arr[0]最小值16,下次排序不带最小值
    第二次arr[1]和arr[2],arr[1]和arr[3],arr[1]和arr[4],比较三次,求出arr[1]最小值24,下次排序不带最小值
    第三次arr[2]和arr[3],arr[2]和arr[4],比较两次,求出arr[2]最小值35,下次排序不带最小值
    第四次arr[3]和arr[4],比较一次,求出arr[2]最小值70,比较结束

  • 图解:


    image.png
  • 运行结果:


    image.png
  • 代码展示:

 public static void demo2(){
                int[] arr = {24, 69, 80, 57, 13};
                int temp = 0;
                for (int i = 0;iarr[j]) {
                            temp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = temp;
                        }
                    }
                }
                for (int i = 0;i

总结:算法题难的不在于代码的实现,而在于我们的思路,只要能理清思路总结出规律,用代码只是去实现了,思路还是需要多练才是王道,练多了也就有经验了。

你可能感兴趣的:(图解数组高级冒泡排序和选择排序)