惊!某小伙竟然这样解释各种排序

1.冒泡排序

原理:前一个数一次和后面的数比较,如果后面的数大,两个数交换位置

原理图

int[] arr={9,6,7,8,3,5};
for (int i = 0; i < arr.length-1; i++) {
    for (int i1 = i+1; i1 < arr.length; i1++) {
        System.out.print("arr["+i+"]"+"-"+"arr["+i1+"]"+" ");
    }
    System.out.println();
}

在这里插入图片描述

代码实现:

int[] arr={9,6,7,8,3,5};
print(arr);
for (int i = 0; i < arr.length-1; i++) {
    for (int i1 = i+1; i1 < arr.length; i1++) {
        if(arr[i]<arr[i1]){
            int temp=arr[i];
            arr[i]=arr[i1];
            arr[i1]=temp;
        }
    }
}
print(arr);

在这里插入图片描述

2.快速排序(效率高)

原理:首先找一个基准数,例:把数组最左边的数作为基准数,然后从右边找比基准数小的数,找到后,记录位置j;在从左边找比基准数大的数,找到后记录位置i;然后arr[i]与arr[j]进行交换,直到i=j,并把次位置的数值与基准数交换,第一轮结束.此时i=j位置的左边是比基准数小的,右边是比基准数大的,然后把两把分成两个数组,分别通过递归进行一开始的方法,排序结束;

原理图:

在这里插入图片描述

代码实现:

public static void quickSort2(int[] arr,int left,int right){
     if(left>right){
         return;
     }
     //基准数
     int base=arr[left];
     //从左边i开始;
    int i=left;
    //从右边j开始;
    int j=right;
    if(i!=j){
        while(arr[j]>=base&&j>i){
            j--;
        }
        while (arr[i]<=base&&i<j){
            i++;
        }
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    arr[left]=arr[i];
    arr[i]=base;

    //排左边比基准数小的
    quickSort2(arr, left, i-1);
    //排右边比基准数大的
    quickSort2(arr, j+1, right);
}

在这里插入图片描述

3.选择排序

原理:从最左边依次排序,首先记录第一个数为最小值(min),那它和后面所有数比较,找到第一个比最小值小的数,然后互换位置,依次类推

原理图:

在这里插入图片描述

代码实现:

//选择排序
public static void changeSort(int[] arr){
    for (int i = 0; i < arr.length-1; i++) {
        int min=i;
        for (int i1 = i+1; i1 < arr.length; i1++) {
            if(arr[min]>arr[i1]){
                int temp=arr[i1];
                arr[i1]=arr[i];
                arr[i]=temp;
            }
        }

    }
}

在这里插入图片描述

4.插入排序

原理:从第二个数开始找,去比较前一位数的,若比前一位数小,就交换位置,特别注意,插入排序是通过多次交换位置,达成插入的动作,即符合条件的数往前移动到目标位置,目标位置往后移动一位

原理图:

在这里插入图片描述

代码实现:

//插入排序
public static void insertSort(int[] arr){
    for (int i = 1; i < arr.length; i++) {
        for (int i1 = i; i1 > 0; i1--) {
            if(arr[i1]<arr[i1-1]){
                int temp=arr[i1-1];
                arr[i1-1]=arr[i1];
                arr[i1]=temp;
            }
        }
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值