
数组
耳冉鹅
程序员小白
展开
-
复习一:数组(8)-桶排序
桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。 思路: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零 依次将各个元素的最低位、次低位、…、最高位取出,分配到对应的桶中(一维数组) 从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。 算法实现 设置一个定量的数组当作空桶 遍历序列,依次把元素放到对应的桶中 对每个非空桶进行排序 将排序后的非空桶返回到原创 2020-10-11 15:38:43 · 178 阅读 · 0 评论 -
复习一:数组(7)-堆排序
堆排序是指利用堆这种数据结构所设计的一种排序算法。 堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 思路: 堆是具有以下性质的完全二叉树: 每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆 也即: 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] &&原创 2020-10-05 17:21:03 · 289 阅读 · 0 评论 -
复习一:数组(6)-归并排序
归并排序是建立在归并操作上的一种有效,稳定的排序算法。 该算法是采用分治法的一个非常典型的应用。 归并排序的实现由两种方法: 自上而下的递归 自下而上的迭代 思路: 将这个数组分成一半,直到每一部分 把左边的数组排序,右边的数组排序。当我们对左边的数组和右边的素组进行排序的时候,再分别将左边的数组和右边的数组分成一半,然后对每一个部分先排序,再归并 对于上面的每一个部分呢,我们依然是先将他们分半,再归并 归并到上一个层级之后继续归并,归并到更高的层级,直至最后归并完成 算法实现: 申请空间,使其原创 2020-09-27 16:06:29 · 238 阅读 · 0 评论 -
复习一:数组(5)-快速排序
快速排序是冒泡排序的一种优化算法,速度快,效率高。 思路: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 算法实现: 设定一个分界值,通过该分界值将数组分成左右两部分。 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 左边和右边的数据可以独立排序原创 2020-09-26 14:53:08 · 214 阅读 · 0 评论 -
复习一:数组(4)-插入排序
插入排序是一种简单的排序方法。 思路: 每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。 算法实现: 直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,首先拿无序序列中的首元素去与有序序列中的每一个元素比较并插入到合适的位置,一直到无序序列中的所有元素插完为止。 public class insertSort { public static void main(String[] args) { int [] arr = {2,6,原创 2020-09-25 13:25:33 · 828 阅读 · 0 评论 -
复习一:数组(3)-选择排序
选择排序是一种简单直观的排序算法。 思路: 首先在原数列中找到最小(or最大)的元素,然后将其存放到数组的起始位置。 再从剩余未排序的元素中继续寻找最小(or最大)的元素,然后放到已排序好的数组的末尾。 以此类推,直到全数组排序完成。 public class SelectionSort { public static void main(String[] args) { int [] arr = {8,11,25,68,3,4,6,9}; System.out.p原创 2020-09-25 12:49:37 · 366 阅读 · 0 评论 -
复习一:数组(2)-冒泡排序
八种排序算法 1. 冒泡排序 冒泡排序属于一种典型的交换排序。 在交换过程中类似水冒泡一般,大(或小)的元素经过不断地交换由水底慢慢地浮到水的顶端。 思路: 依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。 直观表达,每一趟遍历,将一个最大的数移到序列末尾。 public class MPSort { public static void main(String[] args) { int [] arr={ 1,4,5,3,2,5,6,8,7}; S原创 2020-09-24 15:38:26 · 304 阅读 · 0 评论 -
复习一:数组(1)-基础及Array工具类
数组定义 数组是相同类型数据的有序集合。 相当于装东西的容器。 数组描述的是相同类型的若干个数据,按照一定的先后次序排序组合而成。其中,每一个数据称作为一个元素,每个元素可通过索引(下标)来访问。 创建数组语法 数据类型 [] 数组名称 = new 数据类型[长度] int []arr=new int[5]; arr[0]=1; arr[1]=2; arr[2]=3; arr[3]=4; arr[4]=5; 数据类型 [] 数组名称 = new 数据类型 [] {元素,元素,元素}原创 2020-09-20 16:59:23 · 319 阅读 · 0 评论