常见排序算法--冒泡排序、快速排序

常见排序算法:
• 选择排序
• 直接选择排序、 堆排序
• 交换排序
• 冒泡排序、 快速排序
• 插入排序
• 直接插入排序、 折半插入排序、 Shell排序
• 归并排序
• 桶式排序
• 基数排序
输入( Input) 有0个或多个输入数据,这些输入必须有清楚的描述和定义
输出( Output) 至少有1个或多个输出结果,不可以没有输出结果
有穷性(有限性, Finiteness) 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
确定性(明确性, Definiteness) 算法中的每一步都有确定的含义,不会出现二义性
可行性(有效性,Effectiveness) 算法的每一步都是清楚且可行的,能让用户用纸笔计算而求出答案
https://visualgo.net/zh/sorting
冒泡排序
冒泡排序算法的运作如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {58,63,35,39,27,32,98,5,68};
        for(int x = arr.length - 1 ; x >= 0 ;x--){
            for(int i = 0 ; i < x ; i++){
                if(arr[i] > arr[i + 1]){// 元素两两比较  如果前者大于后者 则交换两个元素的 位置
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1 ] = temp;
                }
            }
        }

       /* for(int i = 0 ; i < arr.length -2 ; i++){
            if(arr[i] > arr[i + 1]){// 元素两两比较  如果前者大于后者 则交换两个元素的 位置
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1 ] = temp;
            }
        }
        for(int i = 0 ; i < arr.length -3 ; i++){
            if(arr[i] > arr[i + 1]){// 元素两两比较  如果前者大于后者 则交换两个元素的 位置
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1 ] = temp;
            }
        }
        for(int i = 0 ; i < arr.length -4 ; i++){
            if(arr[i] > arr[i + 1]){// 元素两两比较  如果前者大于后者 则交换两个元素的 位置
                int temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1 ] = temp;
            }
        }*/
        // 进行数组的遍历
        for (int j  : arr){
            System.out.println(j);
        }
    }
}


快速排序

public class QuickSort {
    public static void main(String[] args) {
        int[] arr = {58,63,35,39,27,32,98,5,68};
        quick(arr);
        for(int x : arr){
            System.out.println(x);
        }
    }
    //快速排序的入口  该方法针对 数组排序 所以需要你传递给该方法一个数组
    public static void  quick(int[] arr){
        if(arr  == null || arr.length ==0 || arr.length == 1){
            return;
        }else{
            sort(arr,0,arr.length -1);
        }

    }
    // 快速排序的核心算法
    public static void sort(int[] arr,int left,int right){
        int len  = arr.length;
        if(left > right){
            return;
        }
        int base = arr[left];
        int i = left;
        int j = right;
        while(i != j ){
            // 从左开始  依次使用左边的元素和基准元素进行比较 直到找到比基准元素大的元素
            while(arr[i] < base && i < j){
                i++;
            }
            // 从右边开始  依次使用右边的元素和基准元素进行比较 直到找到比基准元素小的 元素
            while(arr[j] > base && i < j){
                j--;
            }
            if(i < j ){
                int temp = arr[i];
                arr[i]= arr[j];
                arr[j] = temp;
            }
        }

        sort(arr,0,i -1);
        sort(arr,i + 1 , right);

    }


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值