我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java排序算法的示例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java排序算法的示例分析

这篇文章将为大家详细讲解有关java排序算法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

一、直接插入排序

基本思想:

将一个记录插入到已排序的有序表中,使插入后的表仍然有序

对初始关键字{49 38 65 97 76 13 27 49}进行直接插入排序

java排序算法的示例分析

package Sort;//插入排序public class InsertSort {    public static void main(String[] args) {        int [] arr={49,38,65,97,76,13,27,49};        sort(arr);       print(arr);    }    private static void sort(int [] arr) {        for (int i = 1; i < arr.length; i++) {           for(int j=i;j>0;j--){               if(arr[j]<arr[j-1]){                  swap(arr,j,j-1);               }           }        }    }    private static void swap(int [] arr,int i,int j){        int temp=0;        temp=arr[i];        arr[i]=arr[j];        arr[j]=temp;    }    private static void print(int [] arr) {        for (int i = 0; i <arr.length ; i++) {            System.out.print(arr[i]+" ");        }    }}

13 27 38 49 49 65 76 97

Process finished with exit code 0

二、 希尔排序

希尔排序又称“缩小增量排序”(Diminishing Increment Sort))属于插入排序类。

基本思想:

先将整个待排序的记录分割成若干子序列分别进行“直接插入排序”,待整个序列中的记录”基本有序“时,再对全体记录进行一次直接插入排序。

java排序算法的示例分析

package Sort;//希尔排序是插入排序的改良public class ShellSort {    public static void main(String[] args) {        int [] arr={16,25,12,30,47,11,23,36,9,18,31};        sort(arr);        print(arr);    }    private static void sort(int [] arr) {        //gap设置优化        int h=1;        while(h<arr.length/3){            h=h*3+1;        }       for(int gap=h;gap>0;gap=(gap-1)/3) {//gap:希尔排序的间距           for (int i = gap; i < arr.length; i++) {               for (int j = i; j >gap-1; j-=gap) {                   if (arr[j] < arr[j - gap]) {                       swap(arr, j, j - gap);                   }               }           }       }    }    private static void swap(int [] arr,int i,int j){        int temp=0;        temp=arr[i];        arr[i]=arr[j];        arr[j]=temp;    }    private static void print(int [] arr) {        for (int i = 0; i <arr.length ; i++) {            System.out.print(arr[i]+" ");        }    }}

9 11 12 16 18 23 25 30 31 36 47

Process finished with exit code 0

三、冒泡排序

冒泡排序

四、快速排序

对冒泡排序的一种改进

基本思想:

通过一趟排序将待排序记录分割成独立的两部分,其中一部分的关键字均比另一部分的关键字小,则可分别对这两部分记录继续分别进行排序,以达到整个序列有序。

java排序算法的示例分析

java排序算法的示例分析

package Sort;import java.util.Arrays;//快速排序public class QuickSort {    public static void main(String[] args) {        int[] arr={49,38,65,97,76,13,27,49};        sort(arr,0,arr.length-1);        System.out.println(Arrays.toString(arr));    }    private static void sort(int [] arr,int start,int end) {       if(start<end){           //把数组的第0个数作为标准数           int stared=arr[start];           //记录要排序的下标           int low=start;           int height=end;           //循环找出比标准数大和比标准数小的数           while(low<height){               //右边数字比标准数大               while(low<height&&stared<=arr[height]){                   height--;               }               //用右边的数字替换左边的数字               arr[low]=arr[height];               //左边数字比标准数小               while(low<height&&stared>=arr[low]){                   low++;               }               //用左边的数字替换右边的数字               arr[height]=arr[low];           }           arr[low]=stared;           sort(arr,start,low);           sort(arr,low+1,height);       }    }    }

[13, 27, 38, 49, 76, 97, 65, 49]

Process finished with exit code 0

五、选择排序(Selection Sort)

选择排序

六、堆排序

  堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。

堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。

每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆

1、大顶堆举例说明:

java排序算法的示例分析

我们对堆中的结点按层进行编号,映射到数组中就是下面这个样子:

java排序算法的示例分析

大顶堆特点:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] // i 对应第几个节点,i从0开始编号

2、小顶堆举例说明

java排序算法的示例分析

小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] // i 对应第几个节点,i从0开始编号

一般升序采用大顶堆,降序采用小顶堆

堆排序基本思想

一、堆排序的基本思想是:

将待排序序列构造成一个大顶堆

此时,整个序列的最大值就是堆顶的根节点。

将其与末尾元素进行交换,此时末尾就为最大值。

然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。

二、代码示例

package Sort;import java.util.Arrays;public class HeapSort {    public static void main(String[] args) {        int [] arr={4,6,8,5,9};        heapSort(arr);    }    //编写一个堆排序的方法    public static void heapSort(int[] arr){        int temp=0;        for(int i=arr.length/2-1;i>=0;i--){            adjustHeap(arr,i,arr.length);        }        //将堆顶元素与末尾元素进行交换,此时末尾就为最大值,将最大值全放在数组最后        //重新调整结构,使其满足堆定义,继续交换堆顶元素与当前末尾元素,反复执行调整交换步骤,使整个序列达到有序        for(int j=arr.length-1;j>0;j--) {            //交换            temp = arr[j];            arr[j] = arr[0];            arr[0] = temp;            adjustHeap(arr, 0, j);        }        System.out.println("数组"+Arrays.toString(arr));    }    //将数组调整为一个大顶堆        public static void adjustHeap(int[]arr,int i,int length){         int temp=arr[i];//先取出当前元素的值,保存在临时变量中        //开始调整        //k=i*2+1;k是i节点的左子节点        for(int k=i*2+1;k<length;k=k*2+1){              if(k+1<length&&arr[k]<arr[k+1]){//说明左子节点的值小于右子节点的值                 k++;//k指向右子节点              }              if(arr[k]>temp){//如果子节点大于父节点                  arr[i]=arr[k];//把较大的值赋给当前节点                  i=k;//!!!i指向k,继续循环比较              }else{                  break;              }        }        //当for循环结束后,已经将以i为父结点的最大值放在了堆顶上(局部)          arr[i]=temp;//将temp的值放在调整后的位置    }}

堆排序结果:

数组[4, 5, 6, 8, 9]

七、归并排序

定义:

又一类不同的排序方法,将两个或两个以上的有序表合并成一个新的有序表。

需要辅助空间:O(n)

整个归并需要 [log2n]

时间复杂度:O(nlog2n)

缺点:归并排序占用附加存储较多, 需要另外一个与原待排序对象数组同样大小的辅助数组。

优点:归并排序是一个稳定的排序方法

思路可以推广到“多路归并”

常用于外部排序

java排序算法的示例分析

java排序算法的示例分析

package Sort;//归并排序public class MergeSort {    public static void main(String[] args) {        int [] arr={4,5,7,8,1,2,3,6};        sort(arr);        print(arr);    }    private static void sort(int [] arr) {        int mid=arr.length/2;        int[]temp=new int[arr.length];        int i=0;//标记左边数组        int j=mid+1;//标记右边数组起始点        int k=0;        while(i<=mid&&j<arr.length){            if(arr[i]<=arr[j]){               temp[k]=arr[i];               i++;               k++;            }else{                temp[k]=arr[j];                j++;                k++;            }        }        while(i<=mid){temp[k++]=arr[i++];}//将左边剩余的,复制到数组        while(j<arr.length){temp[k++]=arr[j++];}//将右边剩余的,复制到数组    }    private static void print(int [] arr) {        for (int i = 0; i <arr.length ; i++) {            System.out.print(arr[i]+" ");        }    }}

1 2 3 4 5 6 7 8

Process finished with exit code 0

关于“java排序算法的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java排序算法的示例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java排序算法的示例分析

这篇文章将为大家详细讲解有关java排序算法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、直接插入排序基本思想:将一个记录插入到已排序的有序表中,使插入后的表仍然有序对初始关键字{49 38
2023-06-20

Java中插入排序算法之希尔排序+直接插入排序的示例分析

这篇文章给大家分享的是有关Java中插入排序算法之希尔排序+直接插入排序的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。希尔排序在介绍希尔排序之前,先了解一下直接插入排序一、直接插入排序1. 单趟排序x插
2023-06-25

分析Java排序算法之希尔排序

这篇文章主要介绍“分析Java排序算法之希尔排序”,在日常操作中,相信很多人在分析Java排序算法之希尔排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分析Java排序算法之希尔排序”的疑惑有所帮助!接下来
2023-06-25

HashTable排序的示例分析

小编给大家分享一下HashTable排序的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近在做项目过程中,解析XML文档存放到了hashtable中,但
2023-06-03

Java基于分治法实现的快速排序算法示例

本文实例讲述了Java基于分治法实现的快速排序算法。分享给大家供大家参考,具体如下:package cn.nwsuaf.quick;public cl
2023-05-30

Java算法之堆排序代码示例

堆是一种特殊的完全二叉树,其特点是所有父节点都比子节点要小,或者所有父节点都比字节点要大。前一种称为最小堆,后一种称为最大堆。比如下面这两个: 那么这个特性有什么作用?既然题目是堆排序,那么肯定能用来排序。想要用堆排序首先要创建一个堆,如果
2023-05-30

Java数组实现堆排序的示例分析

这篇文章主要为大家展示了“Java数组实现堆排序的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java数组实现堆排序的示例分析”这篇文章吧。数组全部入堆,再出堆从后向前插入回数组中,数
2023-05-30

c语言排序算法案例分析

本文小编为大家详细介绍“c语言排序算法案例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“c语言排序算法案例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在归并算法中,合并两个数列需要消耗m+n的空间,排
2023-06-17

C语言排序算法实例分析

这篇文章主要讲解了“C语言排序算法实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言排序算法实例分析”吧!1、直接插入排序基本思想:当插入第i(i>=1)个元素时,前面的array
2023-06-29

Python快速排序算法实例分析

本文实例讲述了Python快速排序算法。分享给大家供大家参考,具体如下: 快速排序的时间复杂度是O(NlogN) 算法描述: ① 先从序列中取出一个数作为基准数 ② 分区过程, 将比这个数大的数全部放到它的右边, 小于或等于它的数全部放到它
2022-06-04

排序算法图解之Java快速排序的分步刨析

快速排序是通过一趟排序将要排序的数据分割为独立的两个部分,一部分的所有数据比另外一部分的所有数据要小,然后按照此方法对这两部分分别进行快速排序,整个过程可以递归进行,以此达到整个数据变成有序序列。本文通过示例讲解了快速排序的实现,需要的可以参考一下
2022-11-13

Java经典排序算法源码分析

本篇内容主要讲解“Java经典排序算法源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java经典排序算法源码分析”吧!1.1 快速排序快速排序,一种排序很快的方法,使用分治思想,就是说快
2023-07-05

Java内存模型之重排序的示例分析

小编给大家分享一下Java内存模型之重排序的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、数据依赖性如果两个操作访问同一个变量,而且这两个操作中有一个操作为写操作,此时这两个操作之间存在数据依赖性。数据依赖性分
2023-06-15

web中堆排序的示例分析

这篇文章给大家分享的是有关web中堆排序的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种**选择排序,**它的最坏,最好,平均时间复杂度均为O(
2023-06-27

web中桶排序的示例分析

这篇文章主要为大家展示了“web中桶排序的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“web中桶排序的示例分析”这篇文章吧。桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,也
2023-06-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录