Java排序算法

1.冒泡排序

将序列中所有元素两两比较,将最大的放在最后面 ,将剩余序列中所有元素两两比较,将最大的放在最后面
重复第二步,直到只剩下一个数
在这里插入图片描述

public void bubbleSort(int[] a){
    int length=a.length;
    int temp;
    for(int i=0;i<a.length;i++){
        for (int j = 0; j< a.length-i-1; j++) {
            //比较两个的值
            if(a[j]>a[j+1]){
                //交换位置
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }

        }
    }
}

2.插入排序

1.首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。
⒉.设定插入数和得到已经排好序列的最后一个数的位数 insertNum和j=i-1。
3.从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。
4.将当前数放置到空着的位置,即j+1。

在这里插入图片描述

public void insertSort(int[] a){
    int length=a.length;//数组长度
    int insertNum;//要插入的数
    for(int i=1;i<length;i++){//插入的次数
        insertNum=a[i];//要插入的数
        int j=i-1;//已经排序好的系列元素个数
        while(j>=0&& a [j]>insertNum){//序列从后到前循环,将大于insertNum的数后移一格
            a[j+1]=a[j];//元素后移一格
            j--;

        }
        a[j+1]=insertNum;//将要插入的数放在要插入的位置

    }
}

3.希尔排序

将数的个数设为n,取奇数k=n/2;将下标差值为k的数为一组,构成有序序列
再取k=k/2,将下标差值为k的书分为一组,构成有序序列
重复第二步,直到k=1执行简单插入排序
在这里插入图片描述

public  void sheelSort(int [] a){
    int d=a.length;
    while(d!=0){
        d=d/2;
        for (int x= 0; x < d; x++) {//分的组数
            for (int i = x+d;i<a.length; i+=d) {//组中的元素,从第二个数开始
                int j=i-d;//j为有序数列的最后一位的位数
                int temp=a[i];//要插入的元素
                for(;j>=0 && temp<a[j];j-=d){//从后往前遍历
                    a[j+d]=a[j];//向后移动d位
                }
                a[j+d]=temp;

            }

        }
    }
}

4.简单选择排序

遍历整个序列,将最小的数放在最前面
遍历剩下的序列,将最小的数放在最前面
重复第二步,直到只剩下一个数
在这里插入图片描述

public void selectSort(int[] a){
    int length=a.length;
    for (int i = 0; i <length ; i++) {//循环次数
        int key=a[i];
        int position=i;
        for(int j=i+1;j<length;j++){ //选出最小值的位置
            if(a[j] < key){
                key=a[j];
                position=j;
            }
            
        }
        a[position]=a[i];//交换位置
        a[i]=key;
    }
}

5.快速排序

选择第一个数为p,小于p的数放在左边,大于p的数放在右边
递归的将p左边和右边的数都按照第一步进行,直到不能递归
在这里插入图片描述

public static void quickSort(int[]numbers,int start,int end){
    if(start<end){
        int base=numbers[start];//选定的基准值
        int temp;//记录临时中间值
        int i=start,j=end;
        do{
            while ((numbers[i]<base)&&(i<end))
                i++;
            while ((numbers[j] > base) && (j>start))
            j--;
if(i<=j){
    temp=numbers[i];
    numbers[i]=numbers[j];
    numbers[j]=temp;
    i++;
    j--;}}
        while(i<=j);
        if(start <j)
            quickSort(numbers,start,j);
        if(end>i)
            quickSort(numbers,i,end);
}
        }

    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中常用的排序算法有很多种,以下是一些常见的排序算法: 1. 冒泡排序(Bubble Sort):比较相邻的元素,如果顺序错误就交换位置,重复这个过程直到所有元素都排好序。时间复杂度为O(n^2)。 2. 选择排序(Selection Sort):每次从未排序部分选择最小(或最大)的元素放到已排序部分的末尾,重复这个过程直到所有元素都排好序。时间复杂度为O(n^2)。 3. 插入排序(Insertion Sort):将数组分为已排序和未排序两个部分,每次从未排序部分选择一个元素插入到已排序部分的合适位置,重复这个过程直到所有元素都排好序。时间复杂度为O(n^2)。 4. 快速排序(Quick Sort):选择一个基准元素,将小于基准的元素放在左边,大于基准的元素放在右边,然后对左右两个子数组递归地进行快速排序。时间复杂度平均为O(nlogn),最坏情况下为O(n^2)。 5. 归并排序(Merge Sort):将数组递归地拆分成两个子数组,分别对子数组进行归并排序,然后将两个有序子数组合并成一个有序数组。时间复杂度为O(nlogn)。 6. 堆排序(Heap Sort):通过构建一个最大堆(或最小堆),然后将堆顶元素与最后一个元素交换,重复这个过程直到所有元素都排好序。时间复杂度为O(nlogn)。 以上只是一些常见的排序算法,每种算法都有其优缺点和适用场景,具体选择哪种排序算法要根据实际情况来决定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值