首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

排序算法Java代码实现()—— 插入排序 和 希尔排序

因为希尔排序的核心思想是插入排序,所以本篇将两篇排序一起记录 本篇内容: 插入排序 希尔排序 (一)插入排序 算法思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有...n-1个元素; 排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。...(二)希尔排序 算法思想: 希尔排序的实质就是分组插入排序,又称缩小增量法; 将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序, 然后依次缩减增量再进行排序,待整个序列中的元素基本有序时...,再对全体元素进行一次直接插入排序。...,又称缩小增量法 * 将整个无序序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序, * 然后依次缩减增量再进行排序,待整个序列中的元素基本有序时,再对全体元素进行一次直接插入排序

40020

–冒泡排序种实现(Java)

冒泡排序是非常好理解的,以从小到大排序为例,每一轮排序就找出未排序序列中最大值放在最后。 设数组的长度为N: (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。...(2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。 (3)N=N-1,如果N不为0就重复前面二步,否则排序完成。...如果是对于上面的冒泡排序算法2来说,虽然也只排序100次,但是前面的100次排序每次都要对后面的900个数据进行比较,而对于现在的排序算法3,只需要有一次比较后面的900个数据,之后就会设置尾边界,保证后面的...900个数据不再被排序。...https://github.com/leetcode-hust/leetcode/blob/master/louyuting/src/leetcode/Algorithm/BubbleSort.java

16810

排序):直接选择排序

选择排序的基本思想是:每次从待排序的数据元素集合中选取关键字最小(或最大)的数据元素放到数据元素集合的最前(或最后),数据元素集合不断缩小,当数据元素结合为空的时候选择排序结束。...常用的选择排序有直接选择排序和堆排序两种。堆排序是一种基于完全二叉树的排序。...直接选择排序的基本思想是:从待排序的数据元素集合中选取关键字最小的数据元素并将它与原始数据元素集合中的第一个数据元素交换位置;然后从不包括第一个位置上数据元素中选取关键字最小的数据元素并将它与原始数据元素集合中的第二个数据元素交换位置...;如此重复,直到数据元素集合中只剩一个数据元素为止。...直接选择排序算法是一种不稳定的排序方法。 ?

44640

排序算法():插入排序

插入排序算法维护一个已排序集合和一个待排序集合,每轮迭代,从待排序集合中选择一个元素,插入到已排序集合中的适当位置,通过多次迭代,最终完成排序。...插入排序的不同之处在于,它是顺序选择待排序集合中元素,依次添加到已排序集合中的适当位置上。所以插入排序的操作主要作用于已排序集合上,而非待排序集合。...0, 2, 1, 8, 5, 9, 7] 根据算法过程步骤,待排序集合不为空,所以重复执行步骤一、二: 步骤一,选择待排序集合的第一个元素 4,比较 4 与其左边的元素 6 并交换位置,然后比较...arr[i] = arr[i - 1] i = i - 1 arr[i] = tmp 代码分析 : 以上代码中,第一层循环为需要进行的迭代次数,元素个数为...对于 个元素的序列: 最坏情况下,当序列为逆序时,每一次迭代过程中,都需要比较并交换新元素与其左边的所有元素位置,即第 次迭代,新元素左边的元素个数为 ,所以最坏情况下,算法的交换复杂度和比较复杂度都为

41530

java冒泡排序代码_Java冒泡排序

一、冒泡排序: 利用冒泡排序对数组进行排序 二、基本概念: 依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。...如此下去,重复以上过程,直至最终完成排序、实现思路: 用二重循环实现,外循环变量设为i,内循环变量设为j。...四、java代码实现: package 冒泡排序; import java.util.Arrays; /** * 冒泡排序 * @author chen * */ public class BubbleSort...在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序; package 冒泡排序; import java.util.Arrays; /** * 冒泡排序改进版...对于N个无序数据,我们在进行一趟冒泡排序时,如果第k个数据和第k+1个数据逆序,那么对第k+1个数据进行一趟向前的冒泡排序,使其移动到合适的位置,也就是说让前面k+1个数据调节为正序。

1.9K61

java链表排序方法_java链表排序

插入排序 对链表进行插入排序,是最简单的一种链表排序算法,用于插入排序是迭代的,所以每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。...每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。...对于归并排序排序在数组排序中的运用,详细请点击此处。...这里主要介绍归并排序在链表排序中的运用。...在使用归并排序算法进行链表排序时,其基本思想是将链表细分成一个个子链表,将子链表进行排序,然后再将相邻的两个有序子链表进行合并,得到更长的有序链表,最后一步步得到整个有序链表,子链表进行合并排序时需要用到合并两个有序链表算法

97210

快速排序Java实现_快速排序实现java

高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。...首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。...序列“1”只有一个数,也不需要进行任何处理。至此我们对序列“2 1”已全部处理完毕,得到序列是“1 2”。...快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。...这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。

1.3K10

java冒泡排序经典代码_java冒泡排序

经典算法——冒泡排序(Bubble Sort) 一、示例代码(伸手党看这里) 1.示例一 importjava.util.Arrays;public classBubbleSort {public static...int temp; /*临时变量,交换数据时使用*/ int length =arr.length;for(int p = length-1; p > 0; p–){ /*需要进行N-1(数组长度减一)趟排序...*/ for(int i = 0; i arr[i+1]){//进行位置交换 temp =arr[i]; arr[i]= arr[i+1...在使用冒泡排序的时候有可能会遇到这样一种情况:某一趟排序从头到尾,数组中的数字都没有发生位置交换。 那么上面这种情况说明了什么呢?说明了在经过上一趟的排序后,整个数组就已经被排好序了。...这么说的话原来计划的N-1趟排序我们是不是可以不用跑满了?是的!

75220

经典排序算法()插入排序

插入排序 插入排序,也是一种基于位置比较交换的排序算法。在排序过程中,它总是维持着一个有序的子列表。例如,一个数组的较低索引部分维持着有序。排序的时候,新元素在之前有序的部分中找好位置”插入”进去。...故名,插入排序。 数组被频繁的检索、为排序的项将会移动并插入到已排好序的子列表中,这些都是在一个数组中完成的。...插入排序不适合数据量很大的数组排序,它的平均、最坏复杂度为O(N^2),N是数组的元素个数。...− 依次重复执行知道整个列表都是有序的 插入排序Java代码完整实现 最后编写Java代码实现插入排序: package org.byron4j.sort; /** * * @author...Byron.Y.Y * @version 1.0 * Java-插入排序-以整形数组为例 */ public class InsertionSort { public static void

19220

图解排序算法()之堆排序

预备知识 堆排序   堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。...接下来,我们来看看堆排序的基本思想及基本步骤: 堆排序基本思想及步骤 堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。...代码实现 package sortdemo; import java.util.Arrays; /** * Created by chengxiao on 2016/12/17....arr[a]; arr[a] = arr[b]; arr[b] = temp; } } 结果 [1, 2, 3, 4, 5, 6, 7, 8, 9] 最后 堆排序是一种选择排序...所以堆排序时间复杂度一般认为就是O(nlogn)级。

20020
领券