排序
文章平均质量分 54
排序
ZNineSun
大道至简,返璞归真
展开
-
剑指 Offer 45. 把数组排成最小的数
我们今天通过一道稍微有点难度的题目来讲述一下排序的思想。题目描述:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。题目示例:这道题其本质就是排序,在做这道题之前,我们先了解一下什么叫快速排序快速排序的执行流程如下:1.从序列中选择一个轴点元素pivot从最后一个元素向前遍历,一般情况下选择起始点作为privot2.利用pivot将数组分割成2个子数组将小于pivot的元素放在pivot的左侧将大于pivot的元素放在pivot的右侧原创 2022-05-16 17:32:46 · 229 阅读 · 0 评论 -
排序算法—堆排序
堆分为:大根堆小根堆我先简单说一下大根堆的定义可以将该一维数组视为一棵完全二叉树,大根堆的最大元素存放在根结点,且其任一非根结点的值小于等于其双亲结点值。小根堆的话则和大根堆完全相反,即:小根堆的最小元素存放在根结点,且其任一非根结点的值大于等于其双亲结点值。堆排序的基本思想是:1、将带排序的序列构造成一个大顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素;2、将堆顶元素和最后一个元素交换,然后将剩下的节点重新构造成一个大顶堆;3、重复步骤2,如此反复,从原创 2022-05-19 10:44:55 · 792 阅读 · 0 评论 -
排序算法—快速排序
快速排序的执行流程如下:1.从序列中选择一个轴点元素pivot从最后一个元素向前遍历,一般情况下选择起始点作为privot2.利用pivot将数组分割成2个子数组将小于pivot的元素放在pivot的左侧将大于pivot的元素放在pivot的右侧将等于pivot的元素放在pivot的哪侧都可以,本文选择左侧对子序列进行步骤1和步骤2操作根据这个流程,我们图解一下:代码如下: void quickSort(int[] nums, int start, int end)原创 2022-05-19 10:37:42 · 204 阅读 · 0 评论 -
排序算法—选择排序
选择排序选择排序每一次可以确定一个 最小(或最大)值,这样的话我需要几个就选择几个就好。我们先看看什么是选择排序选择排序的基本思想是:每一趟(如第i趟)在后面n-i+1 (i= 1,2,…", n- 1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,就不用再选了。我下面举个简单的例子,就以我们题目中的示例为例:nums=[4,5,1,6,2,7,3,8]第一趟排序我们先确定第一个最小值(i=0):min初始值为nums[i]=nu原创 2022-05-19 10:34:40 · 551 阅读 · 0 评论