java 数组排序(冒泡排序、快速排序、简单排序)

目录

1、冒泡排序

2、快速排序

3、简单排序


1、冒泡排序

简介:

(1)循环遍历数组,判断相邻两个元素大小如果满足条件list[x]>list[x+1],则将两个元素位置对换。

(2)重复步骤(1),判断初始元素向右依次递减

(3)一般有两层循环,外循环循环次数为数组length,内循环次数依次递减

(4)时间复杂度为O(n)~O(n^2)

实现案例:

public void bubbleSort(int arr[]){
    for (int j=0;j<arr.length;j++){       // 第一轮循环
        for(int i=0;i<arr.length-1-j;i++){// 内循环随着j值变化递减
            if (arr[i]>arr[i+1]){         
            // 判断相邻的两个元素,如果前一个元素大于后一个元素,则两个元素交换值
                arr[i]=arr[i]+arr[i+1];
                arr[i+1]=arr[i]-arr[i+1];
                arr[i]=arr[i]-arr[i+1];
            }
        }
    }
}

2、快速排序

简介:

(1)将对象数组第一个元素值作为基数值,

定义一个left指针从左遍历数组判断元素是否大于基数,若大于将元素移至右边,若小于反之;

定义一个right指针从右边遍历数组判断元素是否小于基数,若小于将元素移至右边,若大于反之;

(2)将数据左右两边的组数作为新的数组对象递归调用执行(1)步骤,直到left指针和right指针指向同一元素。

(3)时间复杂度为O(nlogn)~O(n^2)

实现案例: 

public void quickSort(int[] array,int left,int right){
    if(left<right){
        int int1=left;
        int int2=right;          //取最左边的元素为基数
        int pivot=array[int1];   
        while (left<right){      //大于基数的元素放右边,小于基数的元素放左边
            while (left<right&& array[right]>=pivot){
                right--;
            }
            array[left]=array[right];
            while (left<right&&array[left]<=pivot){
                left++;
            }
            array[right]=array[left];
        }
        array[left]=pivot;
        quickSort(array,int1,left-1);   //取右边的子数组作为参数递归调用
        quickSort(array,left+1,int2);   //取左边的子数组作为参数递归调用
    }
    else return;
}

3、简单排序

简介:

(1)分内外两层循环,核心思维是每轮循环获得一个最大元素,并置于序列前端;

(2)平均时间复杂度O(n^2);

实现案例: 

public void simpleSort(int[] arr){
    for (int i=0;i<arr.length;i++){
        for (int j=i;j<arr.length;j++){
            if (arr[i]<arr[j]){ //将最大元素置于集合前端
                int temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写骚年的代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值