java冒泡排序选择排序快速排序(手撕)

冒泡排序的原理就是一共n个数 排n-1轮 每轮比较的数比上一轮少一个

每一轮把最大的数提到最后面(升序)比如第一轮把最大的数提到最后

第二轮把这轮一个一个比较出来得到的最大的数放到数组的倒数第二个位置上

public void popo(){
        for (int i=0;iarr[j+1]){
                    int temp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
    }

选择排序 比冒泡排序效率要高一点 因为它不会一次次地更换位置 而是用一个变量来存储然后

一个一个比较 也是每次把最大的数提到数组最后面 一共n-1轮

public void option(){
        for (int i=0;i

快速排序 :

思路:这段代码和一般的快排思路还不一样 一般的是找一个基准 然后
左右指针开始移动 都是和这个基准比 比如要升序排序
那么左边指针就要找比基准大的放右边指针元素上 同理右边指针找比基准小的和左边指针元素互换
如果找不到指针就一直移动 找到了就互换 然后换另一个指针移动 循环往复
本段代码不一样的点在于它没有基准 省略了一些东西 就是left和right指针元素直接比
比如降序 就是找左指针比右指针小的 找到了就互换元素并换个指针移动
一样的道理 flag用来控制移动方向
一旦指针重合就一分为二 继续递归排序

这里还有个疑惑 为什么这里要用到递归呢?
因为每次都是两个值再比 只有不符合条件了 指针才会互换
不然指针就一直运动 直到重合 这样就忽略了指针移动过的这些元素的排序
而只比较了这两个元素的位置

public void quick(int low,int high){
        int lo=low;int hi=high;
        if(lo>=hi){
            return;
        }
        boolean flag=false;
        while(lo

冒泡和选择排序建议背下来 快排掌握原理

你可能感兴趣的:(排序算法,算法,数据结构)