- 博客(11)
- 收藏
- 关注
原创 八大排序算法之插入排序—Java
插入排序 时间复杂度O(n^2)空间复杂度O(1) 思路:将数组分为一共无序列表(右侧)一个有序列表(左侧),最初有序列表只有一个,每次将一个无序列表中的数插入到有序列表中 public static void insertSort(int[] ints){ int n = ints.length; for (int i = 1; i < n; i++) {//无序列表从i开始 int indexVal = ints[i];//记录i值
2022-05-03 15:57:03 296
原创 八大排序算法之选择排序—Java
选择排序 时间复杂度O(n^2)空间复杂度O(1) 思路:第一次从arr[0] - arr[n-1]选择最小的与arr[0]替换,第一次从arr[1] - arr[n-1]选择最小的与arr[1]替换… public static void selectSort(int[] ints){ //一共需要n-1次 int n = ints.length ; int index = 0,indexValue = 0;//记录需要交换的下标和对应的值
2022-05-03 15:56:28 292
原创 八大排序算法之冒泡排序—Java
冒泡排序 时间复杂度O(n^2)空间复杂度O(1) 思路:每次碰到大的就交换顺序,共需排序n-1次 public static void bubbleSort_(int[] ints){ int length = ints.length; Boolean flag = false;//排序优化,若在某次循环中一次都没有交换则已排序完成 for (int i = 0; i < length; i++) { for (int j =
2022-05-03 15:55:02 279
原创 八大排序算法之基数排序—Java
#基数排序 基数排序的求解思路可以参考链接. 此处只附对应的Java代码 public class RadixSortDemo { public static void main(String[] args) { int[] arr = {53, 3, 542, 748, 14, 214}; radixSort(arr); System.out.println(Arrays.toString(arr)); } public stati
2022-05-02 21:42:44 190
原创 八大排序算法之归并排序—Java
#归并排序 归并排序采用的经典的分治策略,主要分为分和治两部分,时间复杂度为O(nlog n),空间复杂度为O(n)。主要思想如下图,(该图来自韩顺平老师的课件) 该算法的分部分是为了化简问题将大的数组不断的递归划分成两部分; 治的部分是为了将两个有序数组合并到一起,需要注意的是每次合并的前提是左右两个数组是有序的。 public class MergeSortDemo { public static void main(String[] args) { int[] arr = {
2022-05-02 21:05:07 200
原创 八大排序算法之快速排序—Java
快排 快速排序是对冒泡排序的一种改进。 基本思想:随意找一个中间值,通过一趟排序将要排序的数据分割成独立的两部分,左边的所有数据要比中间的小,右边的所有数据要比中间的大,然后再按照此方法对两边的数据进行递归,以此达到排序的目的。 假设我们对8 5 25 11 23 15进行排序将15作为中间点, 第一次操作后8 5 11 15 23 25 之后对将数组分为左右两部分,左边 8 5 11 右边23 25 分别对两边递归操作直至排序结束 代码如下: public class QuickSortDemo {
2022-04-30 08:57:06 72
原创 【八大排序算法之堆排序—Java】
堆排序 堆的结构可以分为大顶堆和小顶堆,是一个完全二叉树。 首先说明什么是完全二叉树: 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。例如下图就不是一个完全二叉树,虽然1,2层均达到最大个数,但是第三层的节点应几种在左侧,即点7应该位于8的左子节点 其次说明什么是大顶堆和小顶堆: 每个结点的值都大于其左子节点和右子结点的值,称之为大顶堆;每个结点的值都小于其左子节点和右子结点的值,称之为小顶堆。下图即为大顶
2022-04-28 14:04:37 1025
原创 leetcode链表相关题目(一)
206反转链表 题目描述: 思路:尽量做到一次遍历,每次反转一条链的时候要先保存下一个节点,防止反转后找不到下一个节点 public ListNode reverseList(ListNode head) { ListNode pre = null;//前一个节点 ListNode temp = head;//当前节点 while(temp != null){ ListNode temp1 = temp.next;//提前存储下一个节
2022-04-26 15:49:14 545
原创 八大排序算法之希尔排序—Java
#冒泡排序 时间复杂度O(n^2)空间复杂度O(1) 思路:每次碰到大的就交换顺序,共需排序n-1次 public static void bubbleSort_(int[] ints){ int length = ints.length; Boolean flag = false;//排序优化,若在某次循环中一次都没有交换则已排序完成 for (int i = 0; i < length; i++) { for (int j =
2022-04-26 15:07:55 37
原创 【时间复杂度与空间复杂度】
#时间复杂度与空间复杂度 众所周知我们一般从时间复杂度和空间复杂度两个角度评估算法的优劣 时间复杂度:指执行当前算法所消耗的时间,与算法中执行的次数成正比 常见的时间复杂度: 1)常数阶O(1) public int sum(int a,int b){ return a + b; } 2)线性阶O(n) //这个代码会执行n次 public int sum(int n) { int res = 0; for (int i = 0; i <
2022-04-26 14:45:11 39
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人