返回顶部
首页 > 资讯 > 后端开发 > Python >java 算法 6种排序小结
  • 779
分享到

java 算法 6种排序小结

2024-04-02 19:04:59 779人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录冒泡排序选择排序插入排序希尔排序归并排序快速排序冒泡排序 package 冒泡排序; import java.util.Arrays; public class Bub

冒泡排序

在这里插入图片描述


package 冒泡排序;

import java.util.Arrays;

public class Bubble {

    
    public static int[] sort(int[] a){
        for (int i=a.length-1;i>0;i--){
            for (int j=0;j<i;j++){
                if(greater(a[j],a[j+1])){
                    exch(a,j,j+1);
                }
            }
        }
        return a;
    }

    
    private static Boolean greater(int v,int w){
        if (v>=w){
            return true;
        }
        return false;
    }

    
    private static void exch(int[] a,int i,int j){
        int t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

    public static void main(String[] args) {
        int[] a={4,5,6,3,2,1};
        int[] sort = Bubble.sort(a);
        System.out.println(Arrays.toString(sort));
    }
}

选择排序

在这里插入图片描述


package cn.itcast.alGorithm.sort;


public class Selection {
    
    public static void sort(Comparable[] a){
        for(int i=0;i<=a.length-2;i++){
            //定义一个变量,记录最小元素所在的索引,默认为参与选择排序的第一个元素所在的位置
            int minIndex = i;
            for(int j=i+1;j<a.length;j++){
                //需要比较最小索引minIndex处的值和j索引处的值;
                if (greater(a[minIndex],a[j])){
                    minIndex=j;
                }
            }

            //交换最小元素所在索引minIndex处的值和索引i处的值
            exch(a,i,minIndex);
        }
    }

    
    private static  boolean greater(Comparable v,Comparable w){
        return v.compareTo(w)>0;
    }

    
    private static void exch(Comparable[] a,int i,int j){
        Comparable temp;
        temp = a[i];
        a[i]=a[j];
        a[j]=temp;
    }
}

插入排序

在这里插入图片描述
在这里插入图片描述


package 插入排序;

import java.util.Arrays;

public class Insertion {

    public static void sort(int[] a){
        for (int i=1;i<a.length;i++){
            //当前元素为a[i],依次和i前面的元素比较,找到一个小于a[i]的元素
            for (int j=i;j>0;j--){
                if (greater(a[j-1],a[j])){
                    exch(a,j-1,j);
                }else {
                    break;
                }
            }
        }
    }

    
    private static Boolean greater(int v,int w){
        if (v>=w){
            return true;
        }
        return false;
    }

    
    private static void exch(int[] a,int i,int j){
        int t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

    public static void main(String[] args) {
        int[] a={4,3,2,10,12,1,5,6};
        Insertion.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

希尔排序

在这里插入图片描述


package 希尔排序;

import java.util.Arrays;

public class shell {
    
    public static void sort(Comparable[] a) {
        int N = a.length;
//确定增长量h的最大值
        int h = 1;
        while (h < N / 2) {
            h = h * 2 + 1;
        }
//当增长量h小于1,排序结束
        while (h >= 1) {
//找到待插入的元素
            for (int i = h; i < N; i++) {
//a[i]就是待插入的元素
//把a[i]插入到a[i-h],a[i-2h],a[i-3h]...序列中
                for (int j = i; j >= h; j -= h) {
//a[j]就是待插入元素,依次和a[j-h],a[j-2h],a[j-3h]进行比较,如果a[j]小,那么交换位置,如果不小于,a[j] 大,则插入完成。
                    if (greater(a[j - h], a[j])) {
                        exch(a, j, j - h);
                    } else {
                        break;
                    }
                }
            }
            h /= 2;
        }
    }

    
    private static boolean greater(Comparable v, Comparable w) {
        return v.compareTo(w) > 0;
    }

    
    private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }


    //测试代码
    public static void main(String[] args) {
        Integer[] a = {9, 1, 2, 5, 7, 4, 8, 6, 3, 5};
        Shell.sort(a);
        System.out.println(Arrays.toString(a));
    }
}


归并排序

在这里插入图片描述
在这里插入图片描述


package 归并排序;

import java.util.Arrays;

public class Merge {
    private static Comparable[] assist;//归并所需要的辅助数组

    
    public static void sort(Comparable[] a) {
        assist = new Comparable[a.length];
        int lo = 0;
        int hi = a.length - 1;
        sort(a, lo, hi);
    }

    
    private static void sort(Comparable[] a, int lo, int hi) {
        if (hi <= lo) {
            return;
        }
        int mid = lo + (hi - lo) / 2;
//对lo到mid之间的元素进行排序;
        sort(a, lo, mid);
//对mid+1到hi之间的元素进行排序;
        sort(a, mid + 1, hi);
//对lo到mid这组数据和mid到hi这组数据进行归并
        merge(a, lo, mid, hi);
    }

    
    private static void merge(Comparable[] a, int lo, int mid, int hi) {
//lo到mid这组数据和mid+1到hi这组数据归并到辅助数组assist对应的索引处
        int i = lo;//定义一个指针,指向assist数组中开始填充数据的索引
        int p1 = lo;//定义一个指针,指向第一组数据的第一个元素
        int p2 = mid + 1;//定义一个指针,指向第二组数据的第一个元素
        //比较左边小组和右边小组中的元素大小,哪个小,就把哪个数据填充到assist数组中
        while (p1 <= mid && p2 <= hi) {
            if (less(a[p1], a[p2])) {
                assist[i++] = a[p1++];
            } else {
                assist[i++] = a[p2++];
            }
        }
//上面的循环结束后,如果退出循环的条件是p1<=mid,则证明左边小组中的数据已经归并完毕,如果退
//出循环的条件是p2 <= hi, 则证明右边小组的数据已经填充完毕;
//所以需要把未填充完毕的数据继续填充到assist中,//下面两个循环,只会执行其中的一个
        while (p1 <= mid) {
            assist[i++] = a[p1++];
        }
        while (p2 <= hi) {
            assist[i++] = a[p2++];
        }
//到现在为止,assist数组中,从lo到hi的元素是有序的,再把数据拷贝到a数组中对应的索引处
        for (int index = lo; index <= hi; index++) {
            a[index] = assist[index];
        }
    }

    
    private static boolean less(Comparable v, Comparable w) {
        return v.compareTo(w) < 0;
    }

    
    private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }


    //测试代码
    public static void main(String[] args) throws Exception {
        Integer[] arr = {8, 4, 5, 7, 1, 3, 6, 2};
        Merge.sort(arr);
        System.out.println(Arrays.toString(arr));


    }
}

快速排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


package 快速排序;

import java.util.Arrays;

public class Quick {
    public static void sort(Comparable[] a) {
        int lo = 0;
        int hi = a.length - 1;
        sort(a, lo, hi);
    }

    private static void sort(Comparable[] a, int lo, int hi) {
        if (hi <= lo) {
            return;
        }
//对a数组中,从lo到hi的元素进行切分
        int partition = partition(a, lo, hi);
//对左边分组中的元素进行排序
//对右边分组中的元素进行排序
        sort(a, lo, partition - 1);
        sort(a, partition + 1, hi);
    }

    public static int partition(Comparable[] a, int lo, int hi) {
        Comparable key = a[lo];//把最左边的元素当做基准值
        int left = lo;//定义一个左侧指针,初始指向最左边的元素
        int right = hi + 1;//定义一个右侧指针,初始指向左右侧的元素下一个位置
//进行切分
        while (true) {
//先从右往左扫描,找到一个比基准值小的元素
            while (less(key, a[--right])) {//循环停止,证明找到了一个比基准值小的元素
                if (right == lo) {
                    break;//已经扫描到最左边了,无需继续扫描
                }
            }
//再从左往右扫描,找一个比基准值大的元素
            while (less(a[++left], key)) {//循环停止,证明找到了一个比基准值大的元素
                if (left == hi) {
                    break;//已经扫描到了最右边了,无需继续扫描
                }
            }
            if (left >= right) {
//扫描完了所有元素,结束循环
                break;
            } else {
//交换left和right索引处的元素
                exch(a, left, right);
            }
        }
//交换最后rigth索引处和基准值所在的索引处的值
        exch(a, lo, right);
        return right;//right就是切分的界限
    }

    
    private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }

    
    private static boolean less(Comparable v, Comparable w) {
        return v.compareTo(w) < 0;
    }

    //测试代码
    public static void main(String[] args) throws Exception {
        Integer[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 8};
        Quick.sort(arr);
        System.out.println(Arrays.toString(arr));

    }
}


到此这篇关于java 算法 6种排序的文章就介绍到这了,更多相关java 算法排序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: java 算法 6种排序小结

本文链接: https://lsjlt.com/news/154673.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java 算法 6种排序小结
    目录冒泡排序选择排序插入排序希尔排序归并排序快速排序冒泡排序 package 冒泡排序; import java.util.Arrays; public class Bub...
    99+
    2024-04-02
  • Java中七种排序算法总结分析
    目录前言:对文章出现的一些名词进行解释一、插入排序1.基本思想2.直接插入排序3.希尔排序(缩小增量排序)二、选择排序1.基本思想2.直接选择排序3.堆排序三、交换排序1.基本思想2...
    99+
    2024-04-02
  • 详细总结各种排序算法(Java实现)
    一、插入类排序1.直接插入排序思想:将第i个插入到前i-1个中的适当位置时间复杂度:T(n) = O(n²)。空间复杂度:S(n) = O(1)。稳定性:稳定排序。如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元...
    99+
    2023-05-31
    java 排序算法 ava
  • java中几种常见的排序算法总结
    目录本节目标;【插入排序】【优化版】【希尔排序】【选择排序】【堆排序】 【冒泡排序】介绍一个冒泡排序的优化方法; 【快速排序】【归并排序】【正文】【代码简介;】&...
    99+
    2024-04-02
  • C语言完整实现12种排序算法(小结)
    目录1.冒泡排序2.插入排序3.折半插入排序4.希尔排序5.选择排序6.鸡尾酒排序7.堆排序8.快速排序9.归并排序10.计数排序11.桶排序12.基数排序1.冒泡排序 思路:比较相...
    99+
    2024-04-02
  • 图解Java排序算法之3种简单排序
    目录简单选择排序代码实现冒泡排序代码实现直接插入排序代码实现总结排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于...
    99+
    2024-04-02
  • python常用的各种排序算法原理与实现方法小结
    1. 冒泡排序(Bubble Sort) 基本思想:重复地遍历待排序的数列,每次比较相邻的两个元素,如果它们的顺序错误就交换位置,直到没有需要交换的元素为止。 实现代码: def b...
    99+
    2023-05-17
    python 排序算法
  • 盘点几种常见的java排序算法
    目录1.插入排序2.分治排序法,快速排序法3.冒泡排序 low版4.冒泡排序 bigger版5.选择排序6. 归并排序8. 堆排序9. 其他排序10. 比较总结1.插入排序 这个打...
    99+
    2024-04-02
  • java数据结构与算法(快速排序法)
    快速排序法: 顾名思议,快速排序法是实践中的一种快速的排序算法,在c++或对java基本类型的排序中特别有用。它的平均运行时间是0(N log N)。该算法之所以特别快,主要是由于非...
    99+
    2024-04-02
  • Java排序算法之选择排序
    目录一、选择排序二、代码实现三、测试一、选择排序 选择排序就是在每一次遍历过程中将数组中值最小的排到当前的第一位。 总共需要(数组长度-1)次遍历,在每次遍历中假定第一位索引的值为最...
    99+
    2024-04-02
  • java排序算法之冒泡排序
    本文实例为大家分享了java排序算法之冒泡排序的具体代码,供大家参考,具体内容如下 冒泡排序 冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,...
    99+
    2024-04-02
  • java 排序算法之归并排序
    目录简单介绍基本思想思路分析代码实现对代码的一些改进大数据量耗时测试复杂度简单介绍 归并排序(merge sort)是利用 归并 的思想实现的排序方法,该算法采用经典的分治(divi...
    99+
    2024-04-02
  • java 排序算法之快速排序
    目录简单介绍基本思想思路分析代码实现推导实现完整实现大数据量耗时测试性能分析简单介绍 快速排序(Quicksort) 是对 冒泡排序的一种改进。 基本思想 快速排序算法通过多次比较和...
    99+
    2024-04-02
  • java 排序算法之选择排序
    目录基本介绍基本思想思路分析代码实现演变过程优化算法函数封装大量数据耗时测试基本介绍 选择排序(select sorting)也属于内部排序法,是从欲排序的数据中,按指定的规则选出来...
    99+
    2024-04-02
  • java 排序算法之冒泡排序
    目录基本介绍图解冒泡排序算法的过程代码实现演变过程优化封装算法大量数据耗时测试基本介绍 冒泡排序(Bubble Sorting)(时间复杂度为 O(n²))的基本思想:通过...
    99+
    2024-04-02
  • JavaScript实现的七种排序算法总结(推荐!)
    目录前言冒泡排序 基础算法 第二种写法是在基础算法的基础上改良而来的:选择排序 基础算法二元选择排序-优化插入排序 交换法插入排序移动法希尔排序 堆排序 快速排序 归并排序 总结前言...
    99+
    2024-04-02
  • 利用JavaScript实现的10种排序算法总结
    目录1、冒泡排序算法2、选择排序算法3、插入排序算法4、 希尔排序算法5、归并排序算法6、 快速排序算法7、堆排序算法8、计数排序算法9、桶排序算法10、基数排序...
    99+
    2023-05-19
    JavaScript排序算法 JavaScript算法 JavaScript排序
  • Java中常见的查找算法与排序算法总结
    目录1. 基本查找2. 二分查找3. 插值查找4. 斐波那契查找5. 分块查找6. 哈希查找7. 树表查找十大排序算法1. 冒泡排序2. 选择排序3. 插入排序4. 快速排序数据结构...
    99+
    2023-03-11
    Java查找算法 Java排序算法 Java查找 排序
  • Java多种经典排序算法(含动态图)
    算法分析 一个排序算法的好坏,一般是通过下面几个关键信息来分析的,下面先介绍一下这几个关键信息,然后再将常见的排序算法的这些关键信息统计出来。 名词介绍 时间复杂度:指对数...
    99+
    2024-04-02
  • Java实现几种常见排序算法代码
    稳定度(稳定性)一个排序算法是稳定的,就是当有两个相等记录的关键字R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。 排序算法分类 常见的有插入(插入排序/...
    99+
    2022-11-15
    Java 排序算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作