java中的数组算法排序(冒泡排序,选择排序,快速排序!!)

冒泡排序

冒泡排序的原理

在这里插入图片描述

不断的让前一个(i)和后一个(i+1)作比较 然后将大的值赋给i+1,这样每一轮都会有一个像气泡一样的数被放到数组的最后面,第一轮重复arr.length-1次(拿第一个和后面length-1个作比较),后面每一轮都会有一个数被冒泡排序到最后这样就形成了有序数组。

冒泡排序实现

public class HelloBubble {
    public static void main(String[] args) {
        //定义一个数组
        int [] arr = {1,33,5,22,13,3};

        //第一重循环决定要排序的轮数
        for (int i = 0; i <= arr.length - 1; i++) {
        //第二重循环冒一个最大的数出来排到数组的最后面
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j]>arr[j+1]){
                    //使用中间值x进行元素的替换
                    int x ;
                    x = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] =x;
                }
            }
        }
        //增强for循环遍历输出数组
        for (int a:arr){
            System.out.print(a+"  ");
        }
    }
}

选择排序

选择排序原理

在这里插入图片描述

每一轮都从数组中拿第i个数出来然后让其与数组中的每一个元素作比较,如果有比它小的数就将这个数的下标记下,然后将i这个下标的数与之前记下下标的元素的值进行交换,这样第一轮下来便将数组中最小的一个数放在了第一,第二轮还是选择第i个数(此时的i为数组中的第二个数)

选择排序的实现

public class HelloMin {
    public static void main(String[] args) {
         hellMin();
         
    }
    private static void hellMin() {
       //定义一个数组
        int [] arr = {1,3,4,52,3,53,21,4};
       //第一重循环决定要排序的轮次 
        for (int i = 0; i < arr.length - 1; i++) {
       //假设第一个值是最小值下标
            int minindex = i;
       //使用循环找到真实的最小值下标
            for (int j = i+1;  j<=arr.length-1 ; j++) {
                if (arr[minindex]>arr[j]){
                    minindex = j;
                }
            }
       //中间变量换值法  数组中第一个数换为最小值的值。
            int x =0;
            x = arr[i];
            arr[i] = arr[minindex];
            arr[minindex] =x;
        }
       //增强for循环输出排序完成的数组
        for(int a:arr){
            System.out.print(a+"  ");
        }
    }
}

快速排序

快速排序的原理

在这里插入图片描述

将数组中的第一个数拿出,然后从数组的右边向左边找第一个小于拿出的这个数的数,将这个数的下标改成第一个数的下标,此时从数组的左边向右边寻找第一个比拿出来的这个数大的数,将它的下标改成刚才被填到拿出来的那个数的位置,这样经过很多轮以后,这个数组变成了左边都比第一次拿出来的数小的数,数组的右边变成了都比第一次拿出来大的数,然后将第一次拿出来的数填到中间,此时这个数组被从中间分成了两个新的数组,然后再对每个新数组进行以上操作(用到了方法的递归!!!

快速排序实现

package course;

public class quick_sort {
    public static void main(String[] args) {
    //定义一个数组
        int [] arr = {48,6,57,88,60,42,83,73,88,85};
     //调用快速排序方法将 数组 ,开始 , 结束 三个参数传入    
         quickly_sort(arr,0,arr.length-1);
      //使用增强for循环查看快速排序后的数组的顺序
         for(int a:arr){
             System.out.print(a+" ");
         }
    }

    private static void quickly_sort(int s[],int l,int r) {
        if(l<r){
            
            int i  = l, j = r,x = s[l];
            while(i<j){
                while(i<j && s[j] >= x)//从右向左找第一个小于x的数
                    j--;
                    if(i<j)
                        s[i++] = s[j];
                    while(i < j && s[i] < x)//从左向右找第一个大于等于x的数
                        i++;
                    if(i < j)
                        s[j--]  = s[i];




            }
            s[i]  =x;
            //方法递归
            quickly_sort(s,l,i-1);
            quickly_sort(s,i+1,r);
        }
    }
}

最后你实在是不会我也没办法了,还有!!不会有人觉得收藏了就学会了吧!不会吧不会吧!!

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值